Yii2:将 hasMany() 关系转换为 hasOne()

问题描述

我需要能够将查询并返回 hasMany()array 关系转换为返回 hasOne()object|null 关系。

用例:

public function getItems() : \yii\db\ActiveQuery {
    return $this->hasMany(Item::class,['parent_id' => 'id']);
}

我想创建一个关系,该关系返回一个特定的 Item 对象(如果不存在,则返回 null)。

我想做这样的事情:

public function getPrimaryItem() : \yii\db\ActiveQuery {
    return $this->getItems()->andWhere(["primary"=>true])->toHasOne();
}

请不要告诉我在原始查询调用 ->one(),因为这不会解决问题。我需要能够:

  • 拨打 $model->primaryItem 并收到 Itemnull
  • 调用 $model->getPrimaryItem() 并接收关系的 ActiveQuery

解决方法

您可以通过 --net hostmultiple 属性切换它

\yii\db\ActiveQuery