Laravel 5.5, запрос к БД объединяет 3 таблицы и группирует по категориям - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть три таблицы, к которым я хочу присоединиться, и сгруппировать их по категориям. что-то вроде: "западная еда" => грузовик а, грузовик б В настоящее время, если у меня есть два грузовика в одной категории, в результате они не отображаются, а только один.

tables:
touch_points: id, name

1 | starbucks

2 | kfc

3 | mcdonalds


t_categories: id, name

1 | western food

2 | chinese food

3 | indian food

truck_categories: id, touch_point_id, t_category_id

1 |  1 | 3

2 |  2 | 3

3 |  3 | 4

запрос, который у меня сейчас есть, таков:

 $truck = DB::table('truck_categories')
        ->join('touch_points', 'truck_categories.touch_point_id', '=', 'touch_points.id')
        ->join('t_categories', 't_categories.id', '=', 'truck_categories.t_category_id')
        ->select('t_categories.name', 'touch_points.id')
        ->groupBy('t_categories.name')
        ->get();

    return $truck;

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

вы можете сделать так

$shares = DB::table('shares')
    ->join('users', 'users.id', '=', 'shares.user_id')
    ->join('follows', 'follows.user_id', '=', 'users.id')
    ->groupBy('currency_list')
    ->get();

для более подробной информации см. это и это

0 голосов
/ 25 апреля 2018

Если вы хотите придерживаться стандартов кодирования в laravel, используйте ORM, как показано ниже:

=> Для touch_points , t_categories , truck_categories таблица, которую вы уже создали Модель для этого.

=> Затем необходимо установить отношения для связанных с родителем и дочерним элементом таблицы.

=> Связанныйк вашей структуре таблицы необходимо добавить отношение к следующему:

truck_categories

class TruckCategory extends Eloquent{

  protected $table = 'truck_categories';  

  public function touchpoint()
  {
       return $this->belongsTo('App\TouchPoint'); // touch_points's model name.
  }
  public function tcategory()
  {
       return $this->belongsTo('App\TCategory'); // t_categories model name.
  }
}

touch_points

class TouchPoint extends Eloquent{

  protected $table = 'touch_points';  

  public function truckcategory()
  {
       return $this->hasMany('App\TruckCategory'); // truck_categories's model name.
  }
}

t_categories

class TCategory extends Eloquent{

  protected $table = 't_categories';  

  public function truckcategory()
  {
       return $this->hasMany('App\TruckCategory'); // truck_categories's model name.
  }
}

=> Тогда данные получаются из всей таблицы с группой по:

 App\TCategory::with('truckcategory')->get();
0 голосов
/ 25 апреля 2018

попробуйте эту группу по t_category_id

$truck = DB::table('truck_categories')
        ->join('touch_points', 'touch_points.id' , '=', 'truck_categories.touch_point_id')
        ->join('t_categories', 't_categories.id', '=', 'truck_categories.t_category_id')
        ->select('t_categories.name', 'touch_points.id')
        ->groupBy('truck_categories.t_category_id')
        ->get();

    return $truck;  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...