我在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。
答案 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()
。