第一次创建模型

时间:2016-07-01 14:00:37

标签: mysql laravel constraints laravel-5.2

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

但因此违反约束。有可能这样做吗?

编辑:

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

1 个答案:

答案 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;

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