2017-02-10 13 views
1

からすべての製品を取得する私は3つのテーブルを持っていますレポitoriesカタログlaravel

例:だから、質問は

abstract class Repository 
{ 
    protected $model = false; 

    public function get($select = '*',$where = false, $take = false) 
    { 
     $builder = $this->model->select($select); 

     if($where) 
     { 
      $builder->where($where); 
     } 

     if($take) 
     { 
      $builder->take($take); 
     } 

     return $builder->get(); 
    } 
} 

class ProductsRepository extends Repository 
{ 

    public function __construct(Product $products) 
    { 
     $this->model = $products; 
    } 

    public function getNewProducts() 
    { 
     return $this->get('*',['is_recommended' => 1],Config::get('settings.recommended_products_count')); 
    } 

    public function getProductsFromCategory($category_id) 
    { 
     return $this->get('*',['category_id' => $category_id]); 
    } 


} 

です:どのように私はそれのIDでカタログからすべての製品を得ることができますか? 生のSQLで、それは次のようになります:

select * from products 
    join categories 
     on categories.id=products.category_id 
    join catalogs 
     on catalogs.id=categories.catalog_id 
where(catalogs.id=1) 

が、どのように私は私の状況でそれらを得ることができますか?

答えて

0

まず、カタログモデルにカタログや製品との間の関係を定義します。あなたができる

$products = Catalog::with('products')->find($id)->products; 

:今

public function products() 
{ 
    return $this->hasManyThrough('App\Product', 'App\Category', 'catalog_id', 'category_id', 'id'); 
} 

、あなたが与えられたカタログのすべての製品を得ることができる必要がありますhttps://laravel.com/docs/5.4/eloquent-relationships#has-many-through

+0

たより:よりおよそあり、多くのスルーここ関係を見つけますそんなにk個!それは私が(必要なものexcactlyです。 – Ronald

関連する問題