将hasOne和外键放在Laravel中的位置

时间:2016-02-29 20:06:11

标签: php laravel foreign-keys

我目前正在使用Laravel学习开发,我遇到了一个小问题。我想要两个ModelsUsersAddresses

用户只有一个Address,因此我必须将foreign key的{​​{1}}放在address表中吗?但根据Laravel documentationuser表格中包含Address

  

Eloquent根据模型名称假定关系的外键。在这种情况下,自动假定Phone模型具有user_id外键。如果要覆盖此约定,可以将第二个参数传递给hasOne方法:

我应该如何在user foreign key表中使用foreign key而不是在User表中(这在我看来更符合逻辑)。谢谢!

2 个答案:

答案 0 :(得分:1)

在地址表中包含user_id字段更为正确。但是如果你想这样做,请改为使用belongsTo关系:

class User {

    public function address(){

        return $this->belongsTo('App\Address');

    }

}

您可以从语言中看出这不是正确的 - 用户应该有一个地址,并且地址应该属于用户。但是如果你喜欢这种方式,这段代码就可以了。

答案 1 :(得分:1)

您可以在用户模型中输入地址查询。

public function address(){

    return  $this-> hasOne(\App\Address::class);

}

然后可以调用:

 {{$this->user->address()}}

您的地址表中的Thane会为上面的内容创建一个名为users_id的字段。