比较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,
   ],
]);