activerecord - 使用关系通过和比较运算符时,Yii2 对父模型表的别名
问题描述
我有 Yii2 关系
模型变体(简化)
变体 hasOne 参考序列
public function getReferenceSequence()
{
return $this->hasOne(ReferenceSequences::className(), ['id' => 'reference_sequence_id'])->alias('referenceSequence');
}
Variants hasMany Annotations 通过 ReferenceSequence
我想使用比较运算符加入基于模型属性“开始”和“结束”(整数值)的注释。
这不起作用
public function getAnnotations()
{
return $this->hasMany(Annotations::className(), ['chrom' => 'name'])
->via('referenceSequence')
->andOnCondition(['AND',['>=','tx_start',$this->start],['<=','tx_start',$this->end]])
->alias('annotations');
}
我正在寻找具有相同染色体但也在变体模型的开始/结束范围内的注释。
我没有尝试注入模型属性 $this->start 和 $this->end 这由于某种原因只会导致使用一对值,而不是每个搜索结果模型都加入 $this 对象的属性,而是想要使用父表的别名。
'on' 条件应该是这样的:
->andOnCondition(['AND',['>=','tx_start','VARIANTS_MODEL_ALIAS.start],['<=','tx_start',VARIANTS_MODEL_ALIAS.end]])
在 Yii1 中有一个神奇的“t”别名,但这不再起作用了。
解决方案
诸如此类的条件->andOnCondition(['AND',['>=','tx_start',$this->start],['<=','tx_start',$this->end]])
仅适用于延迟加载,因为$this
将引用运行此查询的当前模型。如果您确实Variants::find()
查询是从空模型运行的,那么start
并且end
将始终为空(或具有默认值)。
如果你想让这种关系发挥作用,你可以尝试这样的事情:
public static function find() {
return parent::find()->alias('variants');
}
public function getAnnotations() {
return $this->hasMany(Annotations::className(), ['chrom' => 'name'])
->via('referenceSequence')
->andOnCondition([
'AND',
['>=', 'tx_start', new Expression('variants.start')],
['<=', 'tx_start', new Expression('variants.end')],
])
->alias('annotations');
}
public function getReferenceSequence() {
return $this->hasOne(ReferenceSequences::className(), ['id' => 'reference_sequence_id'])
->alias('referenceSequence');
}
Variant::find()->joinWith('annotations')->all()
这可能适用于连接(如这个答案或更改您的数据库架构以简化整个问题。
推荐阅读
- java - 谷歌登录另一个活动后如何保存谷歌个人资料
- c++ - 我怎样才能不使用新的使用 malloc 翻译
- google-cloud-endpoints - 是否可以在不授予额外权限来访问客户端 GCP 项目的情况下启用使用 Google Cloud Endpoints Portal?
- codeigniter - 如果内容中有“from”关键字,Tinymce 编辑器不保存数据
- webrtc - 在 WebRTC 中与多个对等点共享流的问题?
- python - 如何检查列中的字符串是否与另一列匹配,而不管行
- graphics - 与图形 API 中的计算着色器相比,使用专用 GPGPU 程序的优缺点是什么?
- tsql - 在 SQL 中创建条件列
- reactjs - 如何将我的 Konva fillPatternImage 设置为 100% 高度
- azure-devops - VSTS JPG 减少图像像素