检查 Yii 中是否加载了关系

Art*_*rth 5 php yii

我正在尝试用关系做一些复杂的事情并避免双重加载:

  • 我有一个object活动记录,每个记录都通过关系与某些subjects 有objectSubject关系。

  • subject(相对于object)的类型在objectSubject与另一个关系中定义。

  • 每个都object具有subject每种类型的零个或一个关系

我在Object模型中设置的关系为:

'objectSubjects'=>array(self::HAS_MANY, 'ObjectSubject', 'object_id'),
Run Code Online (Sandbox Code Playgroud)

ObjectSubject型号为:

'type'=>array(self::BELONGS_TO, 'Type', 'type_id'),
'subject'=>array(self::BELONGS_TO, 'Subject', 'subject_id'),
Run Code Online (Sandbox Code Playgroud)

我想补充一个函数来Object得到subjectobject被它的type..

我可以:

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;
}
Run Code Online (Sandbox Code Playgroud)

但这将导致数据库查询,即使object_subjects 及其types 和subjects 急切地加载到object.

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

$this->isLoaded('objectSubjects')什么?

Art*_*rth 4

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

hasRelated(string $name)
Run Code Online (Sandbox Code Playgroud)

我在AR 文档中完全错过了这一点。