【问题标题】:Eloququent: relationship from relationship雄辩:关系中的关系
【发布时间】:2020-02-01 14:13:34
【问题描述】:

拥有三个表/模型:

客户:

id - client

品牌:

id - brand

品牌型号:

id - model - brand_id

品牌模型客户:

id - brandmodel_id - client_id

我想以最简洁的方式获得基于品牌的“分组”客户列表。现在,我的做法很肮脏。

所以重点是,如果我的客户拥有三辆相同品牌的不同汽车,则只获得一个客户元素。

【问题讨论】:

  • 请张贴您尝试过的内容。和型号代码
  • $brand_model_clients = BrandModelClients::with(['brand', 'brands_models'])->get()->groupBy('brands_model_id');

标签: mysql laravel laravel-5 eloquent


【解决方案1】:

我没有得到你的数据库的正确结构,但你应该使用如下的雄辩关系:更多阅读eloquent-relationships


Class Brand extends Model{

    public function models(){
        return $this->hasMany('App\BrandModel', 'brand_id');
    }
}


Class BrandModel extends Model{

    public function clients(){
        return $this->hasMany('App\BrandModelClient', 'brandmodel_id');
    }
}

Class BrandModelClient extends Model{

    public function client(){
        return $this->hasOne('App\Client', 'client_id');
    }
}

$brands = Brand::with('models.clients.client')->get();




【讨论】:

    【解决方案2】:

    以这种方式修复了两个查询:

    //一个获取所有模型

    $models_list = BrandModel::whereIn('brand_id', $list_fav_brands)->get()->pluck('id','model');

    //第二次获取客户

    $client_list = BrandModelsClient::whereIn('brands_model_id', $models_list)->with('client')->get()->pluck('client.id','client.name');

    【讨论】:

      猜你喜欢
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2015-03-14
      • 2018-11-28
      相关资源
      最近更新 更多