Yii2从相关的多个相关模型中选择某些字段

时间:2016-01-31 21:57:51

标签: activerecord yii2 many-to-many

我管理一个联结表来处理Many to Many关系。 items与其units之间的关系,其中一个项目可能有一个或多个单位,一个单位可能有一个或多个单位。

最后,我能够获得以下项目的所有单位数据:

$item = Items::findOne($id);    
return Json::encode($item->units);

但是,返回的JSON对象具有当前操作的不必要字段。我只需要获得单位titleid,但它会返回所有单位字段。

我不知道如何从Items模型中的关系设置进行调整。以下是Items模型中的关系声明:

public function getItemUnits()
    {
        return $this->hasMany(ItemUnits::className(), ['item_id' => 'id']);
    }

    public function getUnits()
    {
      return $this->hasMany(Units::className(), ['id'=> 'unit_id'])->via('itemUnits');
    }

itemUnits是联合模型, item_units表

2 个答案:

答案 0 :(得分:4)

我从关系声明中找到了更简单的解决方案。它采用getUnits方法。我必须按如下方式添加select方法:

public function getUnits()
    {
      return $this->hasMany(Units::className(), ['id'=> 'unit_id'])->select(['id','title'])->via('itemUnits');
}

答案 1 :(得分:0)

您可以加入相关表并修改连接查询,如此

Items::find()
->where(['id'=>$id])
->joinWith(['units'=>function($query){
     $query->select(['id','title']);
}])
->one();