php – Yii – 使用与关系中定义的范围的关系
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – Yii – 使用与关系中定义的范围的关系,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1558字,纯文字阅读大概需要3分钟。
内容图文
![php – Yii – 使用与关系中定义的范围的关系](/upload/InfoBanner/zyjiaocheng/816/19fb0cf7e0f84eea8bea4ae4d2d37809.jpg)
我有一个模型,其中一些关系定义如下.
public function relations()
{
return array(
'linkingTable' => array(self::HAS_MANY, 'LinkingTable', array('this_id'=>'id'), 'scopes'=>array('valid')),
'linkedItems' => array(self::HAS_MANY, 'LinkedItem', array('linked_item_id'=>'id'), 'through'=>'linkingTable', 'scopes'=>array('valid')),
);
}
链接表和链接项都具有有效范围:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"t.`valid`=1",
),
);
}
为了使生成的连接查询能够与关系范围一起使用,我必须修改范围,如下所示:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"`linkingTable`.`valid`=1",
),
);
}
和:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"`linkedItems`.`valid`=1",
),
);
}
问题是当直接从链接模型使用时,这些范围将不起作用,即:
$linkedItems = LinkedItem::model()->valid()->findAll();
导致一个错误,即linkedItems不是定义的别名.当然,这是可以理解的.它还导致需要任何其他想要拥有某些需要以完全相同的方式定义关系的LinkedItem的模型.
是为每个用例定义不同范围的唯一解决方案,如下所示:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"t.`valid`=1",
),
'validForModelRelation'=>array(
'condition'=>"`linkedItems`.`valid`=1",
)
);
}
这感觉有点笨拙.我想知道是否有更好的方法这样做?
解决方法:
您需要能够获取表的当前别名.当它是单独的时候,或当它是相关模型时的关系名称.在相关模型的范围内,您可以使用:
public function scopes() {
return array(
'valid'=>array(
'condition'=>$this->tableAlias.".`valid`=1",
),
);
}
但是,如果您在defaultScope中使用它,则需要使用$this-> getTableAlias(false,false).作为防止无限循环的参数,试图找到别名.
编辑:缺少点
内容总结
以上是互联网集市为您收集整理的php – Yii – 使用与关系中定义的范围的关系全部内容,希望文章能够帮你解决php – Yii – 使用与关系中定义的范围的关系所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。