2016-08-05 67 views
1

我有兩個與yii2相關的模型。我想對它們進行比較,從而用一個id我得到的ID值未在B比較yii2中的兩個活動記錄

也就是說 我有一個公關模型和公關項目模型,我想獲得的PR模式的ID值不在pritems模型

我已經試過

$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 

我怎樣才能在公關而不是在pritems的ID。

回答

1

有幾種方式

您可以findBySql嘗試(使用子查詢)

$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(); 

或者你可以使用activeQuery

$query = Tblpr::find(); 
$query->leftJoinWith('tblpritems', 'tblpr.id = tblpritems.id'); 
$query->andWhere(['pritems.id' => null]); 
$model = $query->all(); 

fo [R dataProviding可以

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

這樣做的var_dump($模型)它的工作方式顯示記錄的,但是當我將它作爲數據提供程序的卡爾蒂克電網返回..Call的一個錯誤一個成員函數getSort()在數組上,我如何改變它,以便我可以將它作爲數據提供者傳遞 –

+0

該查詢提供返回模型..如果您需要dataProvider ..您應該基於查詢構建一個dataProvider ..。 。十分鐘,我更新dataProvider的答案 – scaisEdge

+0

謝謝工程檢查我的其他問題http://stackoverflow.com/questions/38803908/setting-empty-text-in-kartik-dynagrid –

0

剛剛加入relatated表,並檢查它的ID爲空:

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

這是更好地把它擴展到TblprQuery和使用像Tblpr::find()->withoutItems()->all()

+0

這並不返回記錄 –