我想知道在创建用户时是否可以跳过或忽略约束违规。我有一个带有外键address_id
的用户模型。
Schema::table('user', function($table) {
$table->foreign('address_id')->references('address_id')->on('address')->onDelete('cascade');
});
创建用户后,我想创建一个没有地址的用户,稍后会添加该用户。
return User::create([
'first_name' => $data['firstname'],
'last_name' => $data['lastname'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
但因此违反约束。有可能这样做吗?
编辑:
因此,我想保留约束,但上面的示例会遇到约束违规,那么解决此问题的最佳方法是什么?制作虚拟地址条目?
答案 0 :(得分:1)
您可以在添加模型时更改数据库:
protected function turnOffDatabaseChecks()
{
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
Eloquent::unguard();
}
protected function turnOnDatabaseChecks()
{
DB::statement("SET sql_mode = 'STRICT_ALL_TABLES';");
Eloquent::reguard();
}
然后在您的用户模型中:
$this->turnOffDatabaseChecks();
$user = User::create([
'first_name' => $data['firstname'],
'last_name' => $data['lastname'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
$this->turnOnDatabaseChecks();
return $user;
但是,我在使用它时会非常谨慎,并会问自己为什么你有一个你想忽略的外键约束。