Yii2: Могу ли я использовать несколько моделей в модели поиска?

#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