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/

10-10 16:17