首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外键在laravel/PHPMYADMIN中不强制引用完整性

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

Stack Overflow用户
提问于 2019-12-20 06:17:03
回答 1查看 238关注 0票数 3

我有usersphone表,我用laravel建立了一对一的关系,这是完美的,但是如果我尝试手动将数据(外键user_id)添加到电话表,而没有任何用户引用(Id),它也能工作。

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

所以我想问,如果外键没有在db表中添加任何约束,或者是否有任何方法使用laravel添加这些约束,那么外键的优点是什么,请告诉我。

代码段

app/Phone.php

代码语言:javascript
复制
public function user(){
    return $this->belongsTo('App\User');
}

app/User.php

代码语言:javascript
复制
public function phone(){
    return $this->hasOne('App\Phone');
}

routes/web.php

代码语言:javascript
复制
Route::get('/', function () {

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

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


});

电话(迁移)

代码语言:javascript
复制
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');
    });
}

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

代码语言:javascript
复制
$phone->phone = '123456789';
$phone->user_id = '10';
$phone->save();
EN

回答 1

Stack Overflow用户

发布于 2019-12-20 12:22:26

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59420659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档