外键不强制laravel / PHPMYADMIN

时间:2019-12-20 06:17:03

标签: php mysql laravel phpmyadmin

我有usersphone表,并且在laravel中建立了一对一的关系,这很正常,但是如果我尝试手动将数据(外键user_id)添加到电话表中而没有引用任何用户(id)都可以使用。

在mysql(phpmyadmin)中,迁移后没有建立外键关系。

所以我想问一下,如果外键没有在数据库表中放置任何约束,或者是否有任何方法可以使用laravel添加这些约束,那么有什么好处?

代码段

app / Phone.php

public function user(){
    return $this->belongsTo('App\User');
}

app / User.php

public function phone(){
    return $this->hasOne('App\Phone');
}

routes / web.php

Route::get('/', function () {

    $user = factory(\App\User::class)->create();
    $phone=new \App\Phone;

    $phone->phone = '123456789';
    $phone->user_id = '1';
    $user->phone()->save($phone);


});

电话(迁移)

public function up()
{
    Schema::create('phones', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('phone');
        $table->unsignedBigInteger('user_id')->index();
        $table->timestamps();

        $table->foreign('user_id')->references('id')->on('users');
    });
}

Users表中没有任何ID为10的用户,但这也可以将数据添加到电话(user_id)

$phone->phone = '123456789';
$phone->user_id = '10';
$phone->save();

1 个答案:

答案 0 :(得分:0)

没有外键,就没有必要使用关系数据库。它可以帮助您保持完整性和一致性。插入子表时,它将始终检查父表中的记录,另一方面,由于索引,它减少了执行时间。

在这种情况下,您可以将数据插入子表中,因为您没有进行参考键约束。如果您不使用它,那么您将失去关系数据库引擎的作用。

它不是任何框架或编程语言的一部分,而是关于正确的数据库配置和设计的全部。 Laravel不对此负责。

也有一个缺点,但这仅在机器上。这样会增加服务器CPU的成本。