外键在 laravel/PHPMYADMIN 中不强制引用完整性



我有usersphone表,我在 laravel 中建立了一对一的关系,这工作得很好,但是如果我尝试将数据(外键user_id(手动添加到电话表而不引用任何用户(id(,它也可以工作。

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

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

代码片段

应用程序/电话.php

public function user(){
return $this->belongsTo('AppUser');
}

应用/用户.php

public function phone(){
return $this->hasOne('AppPhone');
}

路线/网络.php

Route::get('/', function () {
$user = factory(AppUser::class)->create();
$phone=new AppPhone;
$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');
});
}

用户表没有任何ID 为10的用户,但这也适用于将数据添加到电话(user_id(

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

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

在您的情况下,您可以将数据插入到子表中,因为您没有进行引用键约束。如果您不使用它,那么您将破坏关系数据库引擎的角色。

它不是任何框架或编程语言的一部分,它完全与正确的数据库配置和设计有关。拉拉维尔对此概不负责。

也有一个缺点,但它只在机器上。它增加了服务器 CPU 的成本。

最新更新