Нужно собрать один массив из данных пользователя, которые записаны в несколько разных таблиц, в некоторых таблицах есть несколько записей относящихся к одному и тому же пользователю. Во всех таблицах есть общее поле contid которое хранит в себе id пользователей. Проблема в том, что получается вытащить либо массив, в котором данные либо не все(то есть только один телефон, только один майл, вместо нескольких записанных), либо выводится ошибка. В метод в модель приходит переменная, которая содержит нужный id пользователя, нужно по нему вытянуть данные.
public function getContactData($data)
{
$this->db
->join('contacts_emails', 'contacts.contid = contacts_emails.contid', 'left')
->join('contacts_phones', 'contacts_emails.contid = contacts_phones.contid', 'left')
->join('contacts_names', 'contacts_phones.contid = contacts_names.contid', 'left');
return $this->db
->get_where('contacts', array('contid' => $data['contid']))
->row_array();
}
при таком методе выдаёт ошибку Column 'contid' in where clause is ambiguous
Ошибка in where clause is ambiguous говорит о том, что PostgreSQL не может определить колонку из какой нужно брать данные.
Сделаем минимально воспроизводимый пример:
Пускай есть две таблицы:
table1 | table2
id | id
someName | someName
| table1_fk
И есть следующий запрос:
SELECT someName
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.table1_fk
И здесь мы получаем ошибку, т.к. колонка someName есть и в table1 и в table2
Решение этой проблемы достаточно простое:
SELECT t1.someName --явно указываем из какой таблицы брать колонку
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.table1_fk
Вам в Вашем случае необходимо будет явно указать таблицу, из которой Вы достаете данные.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости