我正在我的应用程序中创建一个购买的表。所以我有2个表:用户和产品。这是一个多对多的关系。
我知道我们必须为此创建一个新表。表的命名约定是复数作为用户和产品。
我们如何称这个购买表? user_product或users_products?
另外我想我需要一个这样正确的模型?如果我确实需要一个模型,该模型的命名约定应该是User_Product吗?
答案 0 :(得分:2)
如前所述,要确定关系连接表的表名,Eloquent将按字母顺序连接两个相关的模型名称。但是,您可以自由地覆盖此约定。您可以通过将第二个参数传递给belongsToMany方法
来实现
在您的情况下,Laravel假定您的加入表名为product_user
。不需要额外的模型:
user.php的
class User extends Model
{
//...
public function products()
{
return $this->belongsToMany(Product::class);
}
//...
}
Product.php
class Product extends Model
{
//...
public function users()
{
return $this->belongsToMany(User::class);
}
//...
}
你的架构看起来像这样:
用户表转移
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
//...
});
产品表迁移
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
//...
});
product_user表迁移
Schema::create('product_user', function (Blueprint $table) {
$table->integer('product_id');
$table->integer('user_id');
//...
});
答案 1 :(得分:1)
关于命名约定,这就是让你的代码更具可读性的东西我认为,所以你可以随意命名(如果你是新手并且学习,我的意见是更好地避免陷入常规起初,我还在学习自我)
无论如何,不需要枢轴模型,除非您只需要一些自定义行为
我认为这会对你有帮助
class User extends Model
{
/**
* The products that belong to the shop.
*/
public function products()
{
return $this->belongsToMany('App\Products');
}
}
您可以执行此操作:$user->products
或查询$product->users
或两者。
现在,通过这种关系声明,Laravel“假设”数据透视表名称遵守规则并且 user_product 。但是,如果它实际上不同(例如,它是复数),您可以将其作为第二个参数提供:
return $this->belongsToMany('App\Products', 'products_users');
如果您想知道如何管理这些内容,可以在here
中找到更多内容