比较yii2中的两个活动记录

时间:2016-08-05 12:34:04

标签: php yii2 yii2-advanced-app

我在yii2中有两个相关的模型。我想比较它们,以便使用id我得到的值不在b

就是这样 我有一个pr模型和pr项目模型,我想获得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

我怎样才能获得pr中的ID而不是pritems。

2 个答案:

答案 0 :(得分: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();

对于dataProviding你可以

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

答案 1 :(得分:0)

只需加入相关表并将其检查为null:

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

最好将其扩展为TblprQuery并使用类似Tblpr::find()->withoutItems()->all()