Yii2的Active Record遇到问题。
我想设置一个hasMany关系,其中包括一个左联接,但是这样做时,记录中只填充了一个关系对象。
这是当前的代码-将已执行的查询从Yii调试粘贴到navicat的副本肯定会返回多个结果。
public function getx()
{
return $this->hasMany(x::className(),['x' => 'x'])
->viaTable('a', ['arId' => 'arId'], function ($query){
$query->leftJoin('a b', 'a.type = b.type AND a.val < b.val')
->andWhere('a.foo IN (0,1,2,3)')
->andWhere('a.bar IN ((0,1,2,3)')
->andWhere('a.moo IN ((0,1,2,3)')
->andWhere('b.val IS NULL');
}
);
}
但是,以下代码可以正常工作(所允许的查询是不同的)。
return $this->hasMany(x::className(),['x' => 'x'])
->viaTable('a', ['arId' => 'arId'], function ($query){
$query->andWhere(['and', ['foo' => [0,1,2,3]],
['bar' => [0,1,2,3]],
['moo' => [0,1,2,3]],
]
);
}
);
在控制器中使用以下命令调用它:
$rs = ar::find(1)->with('x')->all();
问题显然是加入-有人能启发我为什么会这样吗?
最佳答案
请尝试这个,因为这对我有用
public function getx()
{
return $this->hasMany(x::className(), ['xId' => 'xId'])
->leftJoin('a b', 'a.type = b.type AND a.val < b.val',
function($query){
'..here you can add more join'
})
->andWhere('a.foo IN (0,1,2,3)')
->andWhere('a.bar IN ((0,1,2,3)')
->andWhere('a.moo IN ((0,1,2,3)')
->andWhere('b.val IS NULL');
}
请让我知道是否有任何问题,因为我再次说它对我有用。
关于php - Yii 2 Active Record hasMany with LeftJoin,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33356358/