比较yii2中的两个活动记录
Comparing two active records in yii2
我在 yii2 中有两个相关的模型。我想比较它们,以便使用 id 我得到 a 中的 id 值而不是 b
也就是
我有一个 pr 模型和 pr items 模型,我想在 pr 模型而不是 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
如何获取 pr 中的 id 而不是 pritems 中的 id。
只需加入相关 table 并检查它的 ID 是否为空:
$query = Tblpr::find();
$query->innerJoinWith('tblpritems', false);
$query->andWhere(['pritemsId' => null]);
$prWithOutItems = $query->all();
最好将它扩展到 TblprQuery 并像 Tblpr::find()->withoutItems()->all()
一样使用。
有几种方法
您可以尝试使用 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();
对于数据提供你可以
$provider = new ActiveDataProvider([
'query' => $sql,
'pagination' => [
'pageSize' => 20,
],
]);
我在 yii2 中有两个相关的模型。我想比较它们,以便使用 id 我得到 a 中的 id 值而不是 b
也就是 我有一个 pr 模型和 pr items 模型,我想在 pr 模型而不是 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
如何获取 pr 中的 id 而不是 pritems 中的 id。
只需加入相关 table 并检查它的 ID 是否为空:
$query = Tblpr::find();
$query->innerJoinWith('tblpritems', false);
$query->andWhere(['pritemsId' => null]);
$prWithOutItems = $query->all();
最好将它扩展到 TblprQuery 并像 Tblpr::find()->withoutItems()->all()
一样使用。
有几种方法
您可以尝试使用 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();
对于数据提供你可以
$provider = new ActiveDataProvider([
'query' => $sql,
'pagination' => [
'pageSize' => 20,
],
]);