#yii2-advanced-app #yii2-model #yii2-active-records
Вопрос:
В Yii2 могу ли я включить две модели (активные записи) в одну модель поиска и отобразить их в виде сетки?
Например, у меня есть две таблицы «клиенты» и «контакты с клиентами«.
В своей модели поиска я использую клиентов в качестве основной модели, в то время как я хочу «присоединиться слева» к контактам с клиентами и в конечном итоге отобразить Customers.name и CustomerContacts.Номер телефона в представлении сетки (в поставщике данных).
Кто-нибудь, пожалуйста, может помочь мне в этом.
Благодарю.
Ответ №1:
Вариант 1: В модели клиента добавьте эту функцию:
Public function getCustomerContact(){
Return $this-> hasOne( CustomerContact::className,[customer_id,id]);
}
Затем в представлении сетки вы можете легко указать контакт следующим образом:
customerContact.name
Обратите внимание, что это будет работать только в том случае, если между таблицами существует взаимно однозначная связь
Вариант 2: (быстрее, но сложнее)
В поставщике данных используйте запрос, а не модель, т. е. $query = new yiidbQuery();
Затем вы можете выполнить все соединения и т.д. в поставщике данных. Это намного быстрее, но требует немного больше ноу-хау
Ответ №2:
вы можете сделать это, применив левое соединение в SearchModel следующим образом
$query = Customers::find();
$query->joinWith('customer-contact');
А также установить связь с клиентом в Customer.php