【问题标题】:Laravel Eloquent Relationship query with whereHas retrieve dataLaravel Eloquent 关系查询与 whereHas 检索数据
【发布时间】:2022-08-19 05:35:22
【问题描述】:

我的应用程序(Laravel)中有以下模型:

class City extends Model {
  public function travels(){
    return $this->belongsToMany(\'App\\models\\Travel\');
  }
  public function hotels(){
    return $this->hasMany(\'App\\models\\Hotel\');
  }
}

class Travel extends Model {
   public function cities(){
     return $this->belongsToMany(\'App\\models\\City\');
   }
   public function deals()
   {
       return $this->morphMany(\'App\\models\\Deal\', \'dealable\');
   }
}

class Hotel extends Model {
   public function city(){
     return $this->belongsTo(\'App\\models\\City\');
   }
   public function deals()
   {
       return $this->morphMany(\'App\\models\\Deal\', \'dealable\');
   }
}

class Deal extends Model {
   public function dealable()
   {
       return $this->morphTo();
   }
}

我有以下表格布局:

城市

  • 标识
  • 名称

旅行

  • 标识
  • 说明

city_travel

  • 标识
  • city_id
  • travel_id

酒店

  • 标识
  • 名称
  • city_id

交易

  • 标识
  • dealable_id
  • dealable_type

现在我想显示所有城市的名称以及有交易的旅行数量+有交易的酒店数量 (我不仅想要只有旅行或酒店的城市,而且这些旅行或酒店必须有优惠)

例如我们有:

纽约市和 :

  • Hotel 01 => 这家酒店有 3 优惠
  • Hotel 02 => 这家酒店有 1 笔交易
  • Travel 001 => 这家酒店有 1 笔交易
  • Travel 002 => 此商品无优惠

所以结果将是: 纽约市 => 5 笔优惠

我希望我已经很好地解释了我的需求。

谢谢你的帮助!

  • 我不确定这是否是你需要的,但你实际上可以做travels.deals

标签: laravel laravel-5 eloquent eloquent-relationship


【解决方案1】:

使用 SQL 连接和count

$cities = 
    DB::table('cities')
        ->leftJoin('city_travel', 'city_travel.city_id', '=', 'cities.id')
        ->leftJoin('deals', 'deals.travel_id', '=', 'city_travel.id')
        ->selectRaw('cities.*, count(distinct deals.travel_id) as num_deals')
        ->groupBy('cities.id');

dd($cities);

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2021-09-05
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2019-12-11
    • 2022-07-27
    相关资源
    最近更新 更多