用户、购物车和产品的雄辩关系

Tak*_*ver 2 eloquent laravel-4 laravel-5 laravel-5.1

我想问一下UserCartProduct雄辩的关系。hasOne和可以有很多UserCartCartProduct

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 {

    //
}
Run Code Online (Sandbox Code Playgroud)

我的数据库表结构如下:

users

- id
- email
- username
- password
Run Code Online (Sandbox Code Playgroud)

carts

- id
- user_id
- product_id
- quantity
Run Code Online (Sandbox Code Playgroud)

products

- id
- name
- price
Run Code Online (Sandbox Code Playgroud)

它是否正确?

Mar*_*łek 7

不,这是不正确的。

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

  • ID
  • 用户身份
  • 数量

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

因此,您应该定义一个额外的表(数据透视表):

cart_product

- cart_id
- product_id
Run Code Online (Sandbox Code Playgroud)

你应该像这样改变模型products中的关系:Cart

public function products() 
{
  return $this->belongsToMany(\App\Product::class);
}
Run Code Online (Sandbox Code Playgroud)

显然,您应该为您的Product模型创建相同的反向关系,以防您需要它。