Activerecord Yii2,如何通过查询检查关系?

Activerecord Yii2,如何通过查询检查关系?,activerecord,yii2,relationship,Activerecord,Yii2,Relationship,我有两个模型,通过连接表建立关系。所以,我试图从db得到一些没有这种关系的模型。 我可以自己做。 但如何通过查询实现这一点呢?使用with或joinWith方法,并在连接表列中检查是否为NULL?创建连接的模型并将其添加到AR模型方法中: /** * @return ActiveQuery */ public function getJunctions() { return $this->hasMany(Junction::className(), ['someId' =>

我有两个模型,通过连接表建立关系。所以,我试图从db得到一些没有这种关系的模型。 我可以自己做。
但如何通过查询实现这一点呢?使用with或joinWith方法,并在连接表列中检查
是否为NULL

创建连接的模型并将其添加到AR模型方法中:

/**
 * @return ActiveQuery
 */
public function getJunctions()
{
   return $this->hasMany(Junction::className(), ['someId' => 'id']);
}
然后您可以将其与查询一起使用:

$query = Model::find()
    ->joinWith([
        'junctions' => function (\yii\db\ActiveQuery $query) {
            $query->andWhere(['{{junction}}.id' => null]);
        }
    ], false);

是的,正是这样。在我的例子中,我并没有创建一个到连接表的关系,而是有一个使用它的连接表。所以,我有一个像你这样的查询,数据是空的(我想原因是关系方法)。我更改andWhere->where并使用默认的左连接。这样,查询就可以正常工作了。谢谢其中清除所有以前的条件(f.e from behaviors)。正如您所提到的,必须使用左连接。我的错。你对
中的
是正确的,但在这种情况下,我不需要一级条件。在另一种情况下,
和where
相当于
where