2015-12-14 97 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