2016-12-16 9 views
0

私は5つのテーブルを持っています。私は、ユーザーを介してメインカテゴリ=「テスト」があるすべてのアイテムを返すように望んでいたなどLaravel Eloquent 5テーブル

Users 
Categories 
Products 
Product_categories 
Order Details 

ユーザーがアイテムを購入し、私の注文の詳細テーブルで私は量を格納します。

$user = Auth::user(); 

return $user->items(); 

私のユーザモデルでは以下の関係があります。

public function items() 
    { 
     return $this->hasMany('App\OrderDetail','user_id')->selectRaw('item_description,count(quantity) as count')->where('item_description','<>','Carriage')->groupBy('item_id')->get(); 
    } 

私はここにカテゴリテーブルを関連付けられていませんでした知っているが、私は、すべてのユーザーがアイテムのカテゴリは、「テスト」で詳細を注文引くだろうかと思いまして。この項目は、多くのカテゴリ、つまりproduct_categoriesテーブルに関連付けることができます。

答えを書いた人の後ろではありません私は、モデルを介してこれらのリンクを見始める場所を知りたいと思いますか?

モデル関係の中で関数を実行しなければならないと言っても間違いありませんか?

users 
    id 
    name 
    ... 

categories 
    id 
    name 
    ... 

products 
    id 
    name 
    cost 
    ... 

category_product 
    id 
    category_id 
    product_id 

order_details 
    id 
    user_id 
    cost 
    ... 

product_order_detail 
    id 
    product_id 
    order_detail_id 

あなたのモデルは、このような構造にする必要があります:

class User extends Model 
{ 
    public function orderDetails() 
    { 
     return $this->hasMany(OrderDetail::class); 
    } 
} 

class Product extends Model 
{ 
    public function categories() 
    { 
     return $this->belongsToMany(Category::class, 'category_product'); 
    } 

    public function orderDetails() 
    { 
     return $this->belongsToMany(Order::class, 'product_order_detail'); 
    } 
} 

class Category extends Model 
{ 
    public function product() 
    { 
     return $this->belongsToMany(Product::class, 'category_product'); 
    } 
} 

class OrderDetail extends Model 
{ 
    public function user() 
    { 
     return $this->belongsTo(User::class); 
    } 

    public function products() 
    { 
     return $this->belongsToMany(Product::class, 'product_order_detail'); 
    } 
} 

とすべての人のアイテム/製品を取得するためにあなたの要件&構成によれば、あなたのテーブルには、このような構造にする必要があります

答えて

3

Testingというカテゴリに属し、それを注文したユーザーに属します。

$items = Product::whereHas('categories', function($q) { 
        $q->where('name', '=', 'Testing'); 
       })->whereHas('orderDetails', function($q) use($user) { 
        $q->whereHas('user', function($q) use($user) { 
         $q->where('id', $user->id); 
        }); 
       })->get(); 

希望します。