laravel外键列命名约定
我有一个laravel外键列命名约定,laravel,model,foreign-keys,Laravel,Model,Foreign Keys,我有一个LessonGroup模型,其选项卡名为lesson\u groups。如果我想在另一个选项卡中将此表id用作外键,我应该选择哪个列名,以便Laravel能够自动将其作为tolesson\u group表进行区分 lesson_groups id name ----------------------------------------- fields id //foreign key to lesson_groups(what should be the name
LessonGroup
模型,其选项卡名为lesson\u groups
。如果我想在另一个选项卡中将此表id
用作外键,我应该选择哪个列名,以便Laravel能够自动将其作为tolesson\u group
表进行区分
lesson_groups
id
name
-----------------------------------------
fields
id
//foreign key to lesson_groups(what should be the name of this column?)
name
一个好的命名约定是模型名加下划线,id加下划线。例如,FishingBoat将是fishing_boat_id
除非另有规定,否则Laravel将自动假定外键和/或本地键采用此格式。以下是以下内容的摘录: Eloquent通过检查关系方法的名称,并用
\u id
作为方法名称的后缀,来确定默认外键名称
因此,要使命名约定无缝工作,您需要在字段中定义如下关系:
公共功能课程组()
{
返回$this->hasOne('App\LessonGroup');
}
这里的问题是Laravel将模型名中的表名复数化。例如:LessonGroup
模型将通过迁移生成表LessonGroup
。
因此,正确的外键字段名称应该是LessonGroup\u id
?LessonGroup\u id
不起作用。lessongroups表将有一列id。引用LessonGroup的表(即关系)应该有一个LessonGroup\u id。请参阅下面定义外键约束的示例。是,当然我已经做了,但我想问一下命名惯例<代码>课程组id不起作用当您如上定义外键时,不需要列的名称。课程组id是一个很好的命名约定。什么不起作用?在定义关系时,我不会将foreing key column的名称设置为第二个参数:return$this->belongsTo('App\LessonGroup','LessonGroup\u id')
Eloquent将自动将外键设为lesson\u group\u id。您可以将其保留为belongsTo('App\LessonGroup')约定是不将外键复数化,因此lesson\u group\u id
是正确的。另外:public function lessonGroup(){return$this->hasOne(App\lessonGroup::class);}