我有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');
    }
}


并获取属于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();


希望这可以帮助!

关于php - Laravel Eloquent 5张 table ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41186054/

10-12 15:57