2016-12-08 10 views
1

私は2つのモデルを持っています。だから、私はDBからいくつかのモデルを取得しようとしていますが、この関係はありません。 私はthis wayでこれを行うことができます。 しかし、これをクエリで行う方法は? withまたはjoinWithメソッドを使用し、接合表の列にIS NULLをチェックしますか?Yii2、どのようにクエリの関係をチェックする?

+0

はい、まさにそのように。 – Bizley

答えて

2

は、接合部のモデルを作成し、それのためのあなたの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); 
+1

私の場合、私はジャンクションテーブルとの関係を作成していませんが、それを使用しています。だから、私はあなたのようなクエリを持って、データが空(私は理由が関係メソッドにあると思う)だった。私は変更しandWhere - >どこでデフォルトの左結合を使用しますか。そして、このようにして、クエリは動作します。ありがとう! –

+0

以前のすべての条件をクリアします(f.eからの動作)。 – SiZE

+0

あなたが言及したように、LEFT JOINを使用する必要があります。私のせい。 – SiZE

関連する問題