2015-12-14 99 views
3

是否有Laravel具有透视表的id列(多对多的关系)(我使用5.1版本)的任何好处?向Laravel中的数据透视表添加id列的好处?

一个ID

 $table->increments('id'); 

     $table->integer('appointment_id')->unsigned(); 
     $table->foreign('appointment_id')->references('id')->on('appointments')->onDelete('cascade'); 

     $table->integer('client_id')->unsigned(); 
     $table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade'); 

     $table->timestamps(); 

没有ID

 $table->integer('appointment_id')->unsigned(); 
     $table->foreign('appointment_id')->references('id')->on('appointments')->onDelete('cascade'); 

     $table->integer('client_id')->unsigned(); 
     $table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade'); 

     $table->timestamps(); 
+0

是否'$对象 - >删除()'工作,如果你没有一个主键? (我觉得一个是'increments'自动创建的,但我的经验主要是Laravel 4 ...) –

+0

是的,我的作品,它删除了一切,父行和关系,在我的枢轴表,但我使用级联删除。 – user3489502

+0

这将是同在一个标准的数据透视表具有自动递增'id'列:它不会伤害有一个,但他们最终多余的,因为你是(最有可能)永远不会是直接查询数据透视表。例子'SELECT * FROM pivot_table WHERE id = 5;'除非你知道你特别想要那一行,否则没有意义。 –

回答

3

一般来说,答案是否定的,只要Laravel雄辩的模型管理的关系。

但是,如果您需要从Eloquent模型的外部访问表(例如,从另一个应用程序或远程将来,当您重写应用程序以使用下一个大框架时),ID将派上用场。

+0

谢谢,这是有道理的。 – user3489502

2

,同时增加一个id为在枢轴表的主键,因为它会“破”任何验证外键夫妇唯一性,这意味着你可以拥有具有相同的外键夫妇多个记录要小心。

+0

嗯,你说得对。我猜,唯一的解决方法是在外键'$ table-> unique(array('appointment_id','client_id'));'' – user3489502