gpt4 book ai didi

php - 外键不强制 laravel/PHPMYADMIN 中的引用完整性

转载 作者:行者123 更新时间:2023-12-02 04:21:37 25 4
gpt4 key购买 nike

我有 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();

最佳答案

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

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

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

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

关于php - 外键不强制 laravel/PHPMYADMIN 中的引用完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59420659/

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