Yii2: Как сделать внутреннее соединение трех таблиц? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть отношение многие ко многим, поэтому у меня есть три таблицы ( администраторы , офисы и промежуточная таблица ):

2

Мне нужно сделать очень простое innerjoin из трех таблиц, чтобы показать фамилии и их офисы с Active Record . Я пытался, но не мог.

Вот что я пробовал:

<code>$admins = Admins::find()
    ->joinWith(Oficinas::tableName())
    ->all();

echo '<pre>';
print_r($admins);
echo '
'; умереть();

Также мне хотелось бы узнать, как отобразить SQL-запрос, чтобы он помог мне найти решение.

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Вам необходимо указать имя отношения для joinWith(), а не имена таблиц. Поскольку в именах отношений нет никакой информации, я буду использовать простые innerJoin с использованием имен таблиц в соответствии с вашими требованиями для отображения фамилии и названия офиса для администраторов.

Admins::find()
->alias('a')
->select('a.lastnameadm, o.nombreofi')
->innerJoin('admin_oficinas ao','ao.idadm = a.idadm')
->innerJoin('oficinas o','o.idofi = ao.idofi')
->all();
0 голосов
/ 17 апреля 2019

Попробуйте это:

TABLE_NAME_1::find()
   ->join('inner join', 
               'table_name_2',
               'table_name_2.column = table_name_1.column'
           ); 
   ->join('inner join', 
               'table_name_3',
               'table_name_3.column = table_name_2.column'
           )->all();

, но если вы также можете использовать Via, как в следующем примере:

public function getClassschedule()
{
    return $this->hasOne(TABLE_NAME_2::className(), ['table_name_1.column' => 'table_name_2.column'])
        ->via('tableName3');
}

при исключении, результаты должны быть получены, как и в предыдущем примере.поэтому нет необходимости повторять отношения.полную документацию можно посмотреть здесь: https://www.yiiframework.com/doc/guide/2.0/en/db-active-record

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...