【问题标题】:laravel how to add a one to one relasionshiplaravel如何添加一对一的关系
【发布时间】:2014-08-20 02:37:24
【问题描述】:

我有一个带有idmanualaddress_id 字段的restaurant 表。

我有一个带有idrestaurant_id 字段的manualaddress 表。

当然我有更多字段,但我正在尝试简化问题。

每个餐厅都有一个手动地址,每个手动地址属于一家餐厅,所以关系是一对一的。

首先

我真的应该将restaurant_id 添加到manualaddress 表吗?

第二

我知道要在模型中建立这种关系,我必须使用这个:

class ManualAddress  extends Eloquent{

    public function restaurant()
    {
        return $this->belongsTo('Restaurant', 'id');
    }

还有这个:

class Restaurant extends Eloquent
public function manualAddress()
    {
        return $this->hasOne('ManualAddress', 'restaurant_id');
    }

但这让我遇到了一个问题,那就是: 我无法添加餐厅,因为每个餐厅都必须有一个 manualaddress_id,我无法添加手动地址,因为每个手动地址都必须有一个 restaurant_id

我是对的吗?我很困惑:)

【问题讨论】:

    标签: php mysql laravel laravel-4 blade


    【解决方案1】:

    您可以删除 id。

    return $this->belongsTo('Restaurant');
    

    一个建议: 表名始终为 PLURAL。所以不是“餐厅”,而是“餐厅”。

    public function restaurant()
    {
        $this->belongsTo('Restaurant');
    
    }
    

    然后这对许多人来说。

    public function restaurants()
    {
        $this->hasMany('Restaurant');
    
    }
    

    请检查 laravel 文档并仔细阅读。大多数东西都解释得很详细。这些问题在 Stack Overflow 上也被问过很多次。

    另外,对于此类问题,我想邀请您加入 irc.freenode.net #laravel 频道。来和我们聊天。我们会在那里为您提供帮助。

    【讨论】:

    • 谢谢,但我已经阅读了文档并且我有一个问题。其次,我告诉过你,我需要一对一,而不是一对多。你为什么写has many?第三,我应该从restaurant 表中删除manualaddress_id 列吗?还是应该从ManualAddress 表中删除restaurant_id 列?
    • 向您展示为什么应该更改表名。不,你不应该删除 restaurant_id。想一想。没有引用自己的餐厅如何找到它的地址?
    • 通过在 maual 地址表上查询restauran_id 是什么,对吗?我真的没有得到你。这两列不应该被删除吗?另外,文档声明我应该使用 hasOne 而不是 hasMany 来表示一对一的关系,为什么你选择 hasMnay?
    猜你喜欢
    • 2015-03-24
    • 2018-09-27
    • 2014-08-22
    • 2014-06-18
    • 2018-10-03
    • 1970-01-01
    • 2018-05-29
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多