如何使用JOIN将Yii的Active Record模型表与其他表链接起来

时间:2017-07-27 10:28:09

标签: sql join activerecord yii2

我正在使用Yii 2.

我在DB中有表格的模型dict。 我尝试将此表与表User链接,该表auth_assignmentuser_iditem_name使用created_at子句。我写了这个:

LEFT JOIN

然后我将$model = User::find()->leftJoin('auth_assignment AS a', '`a`.`user_id` = `user`.`id`'); 附加到$model

ActiveDataProvider

但是当我运行应用程序时,它只会打印$dataProvider = new ActiveDataProvider([ 'query' => $model, 'pagination' => [ 'pageSize' => 5, ], ]); 个列:screenshot

我做错了什么?

1 个答案:

答案 0 :(得分:0)

User模型中,您无法获取另一个表的属性(auth_assignment)。

你可以通过两种方式来实现。

  1. 使用User
  2. 定义auth_assignment模型中UserhasOne()表格之间的关系

    示例:(使用auth_assignment表的模型名称)

    public function getAuth()
    {
        return $this->hasOne(Authassignment::className(), ['id' => 'user_id']);
    }
    

    您可以将auth_assignment表格属性用作$model->auth->user_id;

    1. 如下所示生成查询作为数组,在此方案中,您无需在模型中定义关系。
    2. $model = User::find() ->select('user.*,a*') ->leftJoin('auth_assignment AS a', 'a.user_id= user.id') ->asArray();

      $dataProvider = new ActiveDataProvider([ 'query' => $model, 'pagination' => [ 'pageSize' => 5, ], ]);

      现在你可以使用属性作为数组变量,即 $model['user_id']等。