gpt4 book ai didi

php - Yii框架2.0 Active Record选择具有一定条件的记录

转载 作者:行者123 更新时间:2023-11-29 12:24:07 25 4
gpt4 key购买 nike

使用 Yii 框架 2.0,我有一个与此类似的数据库表。

---------------------------
| id | name | key | type |
---------------------------
| 1 | John | a | 1 |
---------------------------
| 2 | Lisa | a | 2 |
---------------------------
| 3 | Tom | b | 1 |
---------------------------
| 4 | Smitt | b | 2 |
---------------------------
| 5 | Linda | c | 1 |
---------------------------
| 6 | Peter | d | 1 |
---------------------------

请注意,记录 1 和 2 具有相同的 a 键,记录 3 和 4 具有相同的 b 键 key 。我只想检索记录号 5 和 6,因为记录 1 和 2 是一个 a 组,3 和 4 是一个 b 组>组中,5没有 key 对,因此6也没有 key 对。下面的结果就是我想要的。

---------------------------
| id | name | key | type |
---------------------------
| 5 | Linda | c | 1 |
---------------------------
| 6 | Peter | d | 1 |
---------------------------

下面是我的模型。

class MyModel extends ActiveRecord {

public function getModelItSelf() {
return $this->hasOne(self::className(), ['key' => 'key'])->where(['type' => 2]);
}

public static function getSingleRecord() {
$allMyModels = MyModel::find()->where(['type' => 1])->all();

$arrMySingleModel = [];

foreach($allMyModels as $myModel) {
if(!$myModel->modelItSelf) {
$arrMySingleModel[] = $myModel;
}
}

return $arrMySingleModel;
}

}

在我的 Controller 类中,我可以执行以下操作。

public function actionIndex() {

$allSingleModel = MyModel::getSingleRecord();

}

这是我的解决方案,但是如果您查看 getSingleRecord() 方法。我首先检索类型为 1 的所有记录,并在 foreach 循环中过滤它们并放入单个记录在数组 $arrMySingleModel 中。我想避免检索所有记录,而只想检索没有 key 对的记录。我怎样才能做到这一点?

最佳答案

尝试下面的代码

而不是:

       $allMyModels = MyModel::find()->where(['type' => 1])->all();

用途:

       $allMyModels =  MyModel::all(array('group' => 'key', 'having' => 'count( * ) = 1'));

关于php - Yii框架2.0 Active Record选择具有一定条件的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28603028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com