【发布时间】:2015-02-19 09:43:10
【问题描述】:
使用 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钥匙。我只想检索记录号 5 和 6,因为记录 1 和 2 是一个 a 组,3 和 4 是一个 b 组,5 没有密钥对,6 也没有密钥对。下面的结果就是我想要的。
---------------------------
| 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;
}
}
在我的控制器类中,我可以执行以下操作。
public function actionIndex() {
$allSingleModel = MyModel::getSingleRecord();
}
这是我的解决方案,但如果您查看 getSingleRecord() 方法。我首先检索了所有类型为 1 的记录,然后在 foreach 循环中过滤它们并放入单个记录在数组 $arrMySingleModel 中。我想避免检索所有记录,只想检索没有密钥对的记录。我该怎么做?
【问题讨论】:
标签: php mysql database activerecord yii2