Ларавель Красноречивый и множественные объединения

Я понимаю, как использовать Eloquent для базовых запросов и отношений, но я начинаю запутываться при выборе информации на основе отношений в нескольких таблицах.

Например, я могу получить нужные мне данные из базы данных с помощью построителя запросов следующим образом:

$data['products'] = DB::table('product') ->select('product.id', 'product.ref_num', 'productdetails.name') ->join('productdetails', function($join) { $join->on('product.id', '=', 'productdetails.product_id') ->where('productdetails.website_id', '=', '7'); }) ->leftJoin('product_category', function($join) use($submenu_id){ $join->on('product.id', '=', 'product_category.product_id') ->where('product_category.category_id', '=', $submenu_id); }) ->leftJoin('product_type', function($join) use($type_id){ $join->on('product.id', '=', 'product_type.product_id') ->where('product_type.type_id', '=', $type_id); }) ->get(); 

В основном, я получаю данные из таблиц продуктов и продуктов, в зависимости от того, какая категория является частью продукта и каким типом продукта он является; Они определяются внутренними соединениями для сводных таблиц product_type и product_category.

Теперь, предполагая, что у меня есть корректные отношения, правильно настроенные, как я буду делать это в Eloquent?

Вот соответствующие части Элементальных моделей

Продукт

 class Product extends Eloquent{ public function productdetails() { return $this->hasMany('Productdetail'); public function categories() { return $this->belongsToMany('Category', 'product_category', 'product_id', 'category_id'); } public function types() { return $this->belongsToMany('Producttype', 'product_type', 'product_id', 'type_id'); } } 

информация о продукте

 class Productdetail extends Eloquent { public function product() { return $this->belongsTo('Product'); } } 

Тип продукта

 class ProductTypes extends Eloquent{ function products() { return $this->belongsToMany('products', 'product_id', 'type_id', 'product_id'); } 

категория

 class Category extends Eloquent{ public function products() { return $this->belongsToMany('product', 'product_category', 'category_id', 'product_id'); } } 

заранее спасибо

Предполагая, что ваши отношения правильны, а соответствующие имена таблиц: категории и типы, это сделает работу:

 Product::with('productdetails') ->whereHas('categories', function ($query) use ($submenu_id) { $query->where('categories.id', '=', $submenu_id); }) ->whereHas('types', function ($query) use ($type_id) { $query->where('types.id', $type_id); // side note: operator '=' is default, so can be ommited }) ->get(); Детали Product::with('productdetails') ->whereHas('categories', function ($query) use ($submenu_id) { $query->where('categories.id', '=', $submenu_id); }) ->whereHas('types', function ($query) use ($type_id) { $query->where('types.id', $type_id); // side note: operator '=' is default, so can be ommited }) ->get(); 

Он будет запускать 2 запроса (сначала для получения соответствующих продуктов, второй для сведений о продукте, связанных с ними) и возврата Eloquent Collection

//routes.php

  /* relationship is : content has images(one to many). And I am extracting the images based on the name that is given in the search input ($keyword = Input::get('keyword') */ $dbresults = DB::table('contents')->join('images', 'images.content_id', '=', 'contents.id')->where('contents.Name', 'LIKE', '%' .$keyword. '%')->get(); return View::make('/results')->with("results", $dbresults); 

Посмотреть

 @foreach($results as $result) {{ $result->image_1 }} @endforeach