【问题标题】:Yii2 selecting certain fields from related many to many related modelYii2 从相关的多对多相关模型中选择某些字段
【发布时间】:2016-01-31 21:57:50
【问题描述】:

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

【问题讨论】:

    标签: activerecord yii2 many-to-many


    【解决方案1】:

    我从关系声明中找到了更简单的解决方案。它在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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多