2016-08-05 13 views
1

yii2には2つのモデルがあります。私はそれらを比較したいと思いますidを使用して私はidの値を取得していません。yii2の2つのアクティブレコードの比較

それは です私はPRモデルとPRアイテムモデルを持っており、私はPRモデルではないid値を取得したいと思いますpritemsモデル

に私は私が広報ではなくpritems内のIDを取得できますか

$pr = Tblpr::find()->all(); //This returns all pr model items 

$pritems = Tblpritems::find()->all() //this returns all pritems 

$pr and $pritems are related by id such that id in pritems is a foreign key referencing pr 
を試してみました。

答えて

1

はあなたが

$sql = 'SELECT * FROM tblpr as a 
     where a.id not in (select b.id 
          Tblpritems as b)'; 
$model = Tblpr::findBySql($sql)->all(); 

または左に使用しては

$sql = 'SELECT * FROM tblpr 
     left join Tblpritems on tblpr.id = Tblpritems. id 
     where wTblpritems.id is null'; 
$model = Tblpr::findBySql($sql)->all(); 

に参加する(サブクエリを使用して)findBySqlを試みることができるまたはあなたがactiveQuery

$query = Tblpr::find(); 
$query->leftJoinWith('tblpritems', 'tblpr.id = tblpritems.id'); 
$query->andWhere(['pritems.id' => null]); 
$model = $query->all(); 
を使用することができますいくつかの方法

あります

fo Rすることができます

$provider = new ActiveDataProvider([ 
    'query' => $sql, 
    'pagination' => [ 
     'pageSize' => 20, 
    ], 
]); 
+0

を返すdoesntの配列のメンバ関数getSort()、どうすればデータプロバイダとして渡すことができるのですか? –

+0

クエリはリターンモデルを提供します..もしあなたがdataProviderを必要とするなら..クエリに基づいてdataProviderをビルドする必要があります.. 、。 10分と私はdataProviderの答えを更新する – scaisEdge

+0

ありがとう作品は私の他の質問をチェックhttp://stackoverflow.com/questions/38803908/setting-empty-text-in-kartik-dynagrid –

0

ちょうどrelatatedテーブルを結合し、それがnullのIDチェック:

$query = Tblpr::find(); 
$query->innerJoinWith('tblpritems', false); 
$query->andWhere(['pritemsId' => null]); 
$prWithOutItems = $query->all(); 

それはTblprQueryにそれを拡張し、Tblpr::find()->withoutItems()->all()のように使用することをお勧めします。

+0

dataProvidingこれは、それがレコードを表示して動作しますが、私はkartikグリッドにデータプロバイダとして渡したときにそれが..Callのエラーを返すのvar_dump($モデル)を行うことにより、レコード –

関連する問題