Yii 2,活跃记录,有

时间:2014-06-14 06:50:15

标签: activerecord yii yii2

如何根据关系表中的条件获取一组数据?

在Yii 1中,我可以使用with()'on'语句。这在Yii 2中不起作用,或者我找不到任何好的例子。 例如在Yii 1中我可以这样写:

$criteria = new CDbCriteria();
$criteria->with = array('works'=>array('on' => 'works.user_id=t.id AND (works.work_id=$SOMEVALUE OR ...)'));

我试过这样的事情(userRight是我的关系):

Foo::find()->with(['userRight'=>['on'=>['user_r'=>$this->id]]]);

Yii 2中有没有解决方案?

2 个答案:

答案 0 :(得分:1)

来自官方的例子:

$orders = Order::find()->innerJoinWith([
    'customer' => function ($query) {
        $query->where('customer.created_at > ' . (time() - 24 * 3600))
              ->onCondition(['category_id' => 1]);
    }
])->all();

请参阅this link

答案 1 :(得分:0)

如果你的表中有关系并使用gii生成模型,控制器和视图,它将为关系创建函数。 如果没有,你可以创建函数来声明模型中的关系2表

public function getWorks()
{
    return $this->hasOne(Works::className(), ['id' => 'works_id']);
}

如果hasMany只是翻转id。

并调用函数

Foo::find()->joinWith('works')->all();