【问题标题】:When should I use hasOne() and when should I use belongsTo()?什么时候应该使用 hasOne(),什么时候应该使用 belongsTo()?
【发布时间】:2018-12-11 17:53:48
【问题描述】:

我实际上对使用hasOne()belongsTo() 关系感到困惑。假设关系是1:1。那么是哪一个?

  • 发票有一个客户?
  • 发票属于客户?

注意到我已经实现了这两个,并且它们运行良好..但是标准的是什么?我应该什么时候使用哪一个?

【问题讨论】:

标签: php laravel


【解决方案1】:

hasOne 可用于强模型或实体

belongsTo 可用于弱模型或实体。

我相信您对数据库中的强实体和弱实体有所了解。

【讨论】:

  • 其实我不是..! strongweak 是什么意思?
【解决方案2】:

如果您的 2 个相关表/实体具有一对一的关系,则应使用 hasOne 定义它们。

如果您的 2 个相关表/实体具有一对多的关系,例如 A 有多个 B,则 A 应将 B 定义为 hasMany,B 应将 A 定义为 belongsTo,这将被称为 One To许多(逆)

对于您的情况,两个模型可以相互定义为 hasOne,模型的反面应将拥有模型定义为 belongsTo

  • 一张发票有一个客户,客户属于发票

  • 客户有一张发票,发票属于客户

在一对一的关系中,持有相关表/实体的外键的表/实体始终是关系的拥有方,而另一个则是关系的反方。

【讨论】:

    【解决方案3】:

    您可以在您的情况下使用 invice hasOne(customer) 您不能将 hasOne() 用于客户,因为客户有很多发票,所以击球手使用 hasOne() 和发票和 belongsTo() 和客户。 前任。发票型号 hasOne(客户)

    在客户模型中 属于(发票)

    【讨论】:

      【解决方案4】:

      这取决于哪个表有外键。

      想象一下人与车之间的关系。

      车主可以拥有一辆汽车。 这辆车可以由一位车主拥有。

      所以,Owner 有一辆汽车,而这辆车属于 Ownwe。因此,外键将进入“汽车”。汽车需要知道它属于谁。

      在您的情况下,发票需要知道它属于谁,因此,如果客户可以有许多发票,则客户hasMany(Invoice::class) 和发票belongsTo(Customer::class)

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 2011-04-15
        • 2017-04-10
        • 2012-03-19
        • 2018-05-12
        • 1970-01-01
        • 2022-09-28
        • 2021-09-07
        • 1970-01-01
        相关资源
        最近更新 更多