Yii2:如何进行三个表的内部联接?

时间:2019-04-16 15:45:28

标签: join activerecord yii2

我有多对多关系,所以我有三个表(管理员办公室中间表):

2

我需要对这三个表进行非常简单的内部联接,以显示带有Active Record姓氏及其办公室。我尝试过,但不能。

这是我尝试过的:

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

echo '<pre>';
print_r($admins);
echo '</pre>';
die();

我还想知道如何显示SQL查询,以便它可以帮助我找到解决方案。

2 个答案:

答案 0 :(得分:1)

您需要为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();

答案 1 :(得分:0)

尝试:

#include <stdlib.h>

int main() {
    exit(2);
}

,但如果您也可以像以下示例一样使用Via:

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();

被排除时,应像前面的示例一样获得结果。因此,无需重复关系。完整的文档可以在这里看到: https://www.yiiframework.com/doc/guide/2.0/en/db-active-record