首页 文章

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

提问于
浏览
1

我管理一个联结表来处理 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

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

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

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

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

相关问题