yii2 - Yii2:将 hasMany() 关系转换为 hasOne()
问题描述
我需要能够将hasMany()
查询并返回的关系转换为返回array
的hasOne()
关系object|null
。
用例:
public function getItems() : \yii\db\ActiveQuery {
return $this->hasMany(Item::class, ['parent_id' => 'id']);
}
我想创建一个返回一个特定Item
对象(或者null
如果它不存在)的关系。
我想做这样的事情:
public function getPrimaryItem() : \yii\db\ActiveQuery {
return $this->getItems()->andWhere(["primary"=>true])->toHasOne();
}
请不要告诉我调用->one()
原始查询,因为那不会解决问题。我需要能够:
- 呼叫
$model->primaryItem
和接收Item
或null
- 呼叫
$model->getPrimaryItem()
并接收关系的ActiveQuery
解决方案
您可以通过multiple
属性切换它\yii\db\ActiveQuery
public function getPrimaryItem() : \yii\db\ActiveQuery {
$query = $this->getItems();
$query->multiple = false;
//Your logics
$query->andWhere(["primary"=>true])
return $query;
}
推荐阅读
- mysql - 将 GROUP BY 与 MAX()/MIN() 一起使用会产生不好的结果
- google-apps-script - Google 驱动器权限 api 仅在 20 次调用后引发速率限制错误
- python - 使用请求将变量插入 Python 中的 SQL 查询
- java - Java正则表达式和“贪婪”或早期搜索斜线
- java - 设置 this.updateTime 但它在运行测试时抛出 NullPointerException
- python - 如何使用基本库计算此类列表的频率?
- javascript - HTML5 重置按钮:保存/提交后更改初始值
- django - 覆盖基于通用类的表单并使用自定义表单的属性?
- unity3d - 如何在 Unity 中制作在线“蜂鸣器”
- r - R:当交互不显着时,如何显示 2-way ANOVA 的均值分离字母?