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

标签 php yii

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

  • 我有一个 object 事件记录,每个记录都通过 objectSubject 关系与一些 subject 相关。

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

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

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

'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 添加一个函数,通过 type 获取 objectsubject。 .

我能做到:

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 及其 typesubject 被急切地加载到对象

我想在它们是的情况下替换逻辑,如果它们不是,则只查询一个 subject 行。有什么方法可以检查是否已加载关系?

$this->isLoaded('objectSubjects')这样的东西?

最佳答案

你知道什么?有一个功能

hasRelated(string $name)

我完全错过了 AR docs .

关于php - 检查 Yii 中是否加载了关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25425383/

相关文章:

javascript - 预先输入 Bloodhound 排序返回值。

php - 货币字段上的 parseInt 返回 NaN

PHP Array,根据值获取键

php - Yii框架前后端分离

php - 使用 facebook 创建注册页面

php - 使用 Yii CActiveDataProvider 时如何将 2 个模型与关系连接起来

PHP:在数据库中设置密码字段的最大长度是多少?

yii - Yii2 Controller 与 Yii1 Controller 的结合

php - 选择用户以前没有看过的帖子

php - 如何在mysql中插入数据之前在php中添加条件