laravel外鍵約束添加教程
外鍵約束
Laravel還提供了創建外鍵約束的支持,用於在數據庫層面強制引用完整性。例如,我們在posts
表中定義了一個引用users
表的id
列的user_id
列:
Schema::table('posts', function ($table) { $table->integer('user_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users'); });
你還可以為約束的“on delete”和“on update”屬性指定期望的動作:
$table->foreign('user_id') ->references('id')->on('users') ->onDelete('cascade');
要刪除一個外鍵,可以使用dropForeign
方法。外鍵約束和索引使用同樣的命名規則——連接表名、外鍵名然后加上”_foreign”后綴:
$table->dropForeign('posts_user_id_foreign');
解釋:
第一種情況:
這是數據庫外鍵定義的一個可選項,用來設置當主鍵表中的被參考列的數據發生變化時,外鍵表中響應字段的變換規則的。update 則是主鍵表中被參考字段的值更新,delete 是指在主鍵表中刪除一條記錄:
on update 和 on delete 后面可以跟的詞語有四個
no action , set null , set default ,cascade
no action 表示 不做任何操作,
set null 表示在外鍵表中將相應字段設置為null
set default 表示設置為默認值
cascade 表示級聯操作
就是說,如果主鍵表中被參考字段更新,外鍵表中也更新,主鍵表中的記錄被刪除,外鍵表中改行也相應刪除
第二種情況:
只加
$table->foreign('user_id') ->references('id')->on('users');
當你刪除主表中的數據時,如果外鍵post表中有user_id的值,那么將提示你不可以刪除user主表中的數據