Yii2和ActiveRecord如何在查询中获取关系

时间:2016-04-05 11:40:55

标签: activerecord yii2

我是Yii2的新手,我需要这样做:

我有两张桌子: 表: tbl_user 的字段: user_id,last_company_id

数据: user_id = 29 last_company_id = 49

表: tbl_user_subscriber_company: 的字段: user_id,company_id,current_module

数据:     user_id = 29,     company_id = 49,     current_module ='模块A'

user_id = 29,
company_id = 50,
current_module = 'Module B'

我需要通过调用User模型来获取用户的current_module和last_company_id。 (我工作的公司的要求,他们从用户模型构建一个用户对象,其中包含与数据库相关的所有字段)

所以我想翻译这个mysql查询:

select current_module
from tbl_user a
RIGHT JOIN tbl_user_subscriber_company b
ON a.user_id = b.user_id
AND a.last_company_id = b.company_id
where a.last_company_id = 49
and a.user_id = 29

使用Usel模型中的yii2 ActiveRecord。

我需要一个名为getCurrentmodule的函数,该函数将返回用户所选用户及其last_company_id的当前模块。

希望我有意义,对我来说有点难以解释。

1 个答案:

答案 0 :(得分:1)

我不确定,但你可以试试像,

例如:

User::find()
     ->joinwith('tbl_user_subscriber_company',true,'RIGHT JOIN')
     ->select(['current_module'])
     ->where(['user_id' => tbl_user_subscriber_company.user_id])
     ->andWhere(['last_company_id' => tbl_user_subscriber_company.company_id])
     ->andWhere(['last_company_id' => 49])
     ->andWhere(['user_id' => 29])
     ->all();

$data = (new \yii\db\Query())
        ->select('current_module')
        ->from('tbl_user user')
        ->rightJoin('tbl_user_subscriber_company usc','user.user_id = user_id')
        ->where('user.last_company_id = usc.company_id')
        ->andWhere('user.last_company_id = 49')
        ->andWhere('user.user_id = 29')
        ->all();