Php Laravel雄辩的5张桌子

Php Laravel雄辩的5张桌子,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有五张桌子 Users Categories Products Product_categories Order Details 用户购买了一件物品,并在我的订单明细表中存储了数量等 我想通过用户返回主类别为“Testing”的所有项目 $user = Auth::user(); return $user->items(); 我在我的用户模型上有以下关系 public function items() { return $this->hasMany('

我有五张桌子

Users
Categories
Products
Product_categories
Order Details
用户购买了一件物品,并在我的订单明细表中存储了数量等

我想通过用户返回主类别为“Testing”的所有项目

$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();
    }
公共功能项()
{
return$this->hasMany('App\OrderDetail','user\u id')->selectRaw('item\u description,count(数量)as count')->where('item\u description','','','carries')->groupBy('item\u id')->get();
}
我知道我没有在这里关联categories表,但我想知道如何在项目类别为“测试”的地方提取所有用户订单详细信息。该项目可以与许多类别相关,因此可以使用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');
    }
}
您的模型的结构应如下所示:

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();

希望这有帮助

根据您的要求和结构,您的表格的结构应如下所示:

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');
    }
}
您的模型的结构应如下所示:

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();
希望这有帮助