微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 检查Yii中是否加载了关系

我正在尝试使用关系执行复杂的操作并避免双重加载:

>我有一个对象活动记录,每个都通过objectSubject关系与某些主题有关系.
>主题的类型(与对象相关)在objectSubject中定义了另一种关系.
>每个对象具有每种类型的零个或一个主题关系

我将对象模型中的关系设置为:

'objectSubjects'=>array(self::HAS_MANY, 'ObjectSubject', 'object_id'),

而ObjectSubject模型为:

'type'=>array(self::BELONGS_TO, 'Type', 'type_id'),
'subject'=>array(self::BELONGS_TO, 'Subject', 'subject_id'),

我想添加一个函数给Object通过它的类型获取一个对象的主题.

我可以:

public function fetchSubject($key_string){
  $object_subject=$this->objectSubjects(array(
       'with'=>'subject'
       'scopes'=>array('typed'=>$key_string) /* Inner Join to type */
  ));
  return $object_subjects?$object_subjects[0]->subject:null;
}

但是这将导致数据库查询,即使带有类型和主题的object_subject被急切地加载到对象中.

我想在它们是的情况下替换逻辑,并且只查询一个主题行,如果它们不是..有没有办法检查是否已加载关系?

像$this-> isLoaded(‘objectSubjects’)之类的东西?

解决方法:

好吧,你知道什么?有一个功能

hasRelated(string $name)

我完全错过了AR docs.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐