用户、购物车和产品 Eloquent 关系

User, Cart and Products Eloquent Relationship

我想问一下UserCartProducteloquent的关系。 User 有一个 CartCart 可以有多个 Product.

class User {

    public function cart()
    {
        return $this->hasOne(App\Cart::class);
    }
}



class Cart {

    public function user()
    {
        return $this->belongsTo(App\User::class);
    }

    public function products()
    {
        return $this->hasMany(App\Product::class);
    }
}



class Product {

    //
}

我的数据库 table 结构如下:

users

- id
- email
- username
- password

carts

- id
- user_id
- product_id
- quantity

products

- id
- name
- price

这是正确的吗?

不,这不正确。

users table 是正确的,但是对于 carts table 你不应该有 product_id 列因为它是一对多关系(购物车可以有多种产品),因此您的 carts table 应如下所示:

  • id
  • user_id
  • 数量

但进一步看,您可能不希望购物车和产品之间存在一对多关系,因为产品可能对所有用户都是通用的,因此您需要多对多关系。

所以你应该定义一个额外的 table (pivot table):

cart_product

- cart_id
- product_id

您应该像这样更改 Cart 模型中的 products 关系:

public function products() 
{
  return $this->belongsToMany(\App\Product::class);
}

您显然应该为您的 Product 模型创建相同的反向关系,以备不时之需。