gpt4 book ai didi

mysql - Laravel 在第一次创建模型时跳过约束违规

转载 作者:行者123 更新时间:2023-11-29 11:26:17 25 4
gpt4 key购买 nike

我想知道在创建用户时是否可以跳过或忽略约束违规。我有一个带有外键 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']),
]);

但因此违反了约束。可以这样做吗?

编辑:

因此,我想保留约束,但上面的示例遇到了约束违规,那么解决此问题的最佳方法是什么?制作虚拟地址条目?

最佳答案

您可以在添加模型时更改数据库:

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;

但是,我在使用它时会非常谨慎,并且会问自己为什么有一个您希望忽略的外键约束。

关于mysql - Laravel 在第一次创建模型时跳过约束违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38147378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com