首页 > 解决方案 > Yii2:将 hasMany() 关系转换为 hasOne()

问题描述

我需要能够将hasMany()查询并返回的关系转换为返回arrayhasOne()关系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()原始查询,因为那不会解决问题。我需要能够:

标签: yii2yii2-modelyii2-active-records

解决方案


您可以通过multiple属性切换它\yii\db\ActiveQuery

public function getPrimaryItem() : \yii\db\ActiveQuery {
    $query =  $this->getItems();
    $query->multiple = false;

    //Your logics
    $query->andWhere(["primary"=>true])

    return $query;
}

推荐阅读