什么时候应该使用hasOne()和什么时候应该使用belongsTo()?

时间:2018-07-03 12:05:50

标签: php laravel

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

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

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

4 个答案:

答案 0 :(得分:0)

hasOne可用于强大的模型或实体

belongsTo可用于弱模型或实体。

我确定您对数据库中的强弱实体有个认识。

答案 1 :(得分:0)

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

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

对于您的情况,两个模型都可以将彼此定义为hasOne,并且模型的反面应将拥有模型定义为belongsTo

  •   

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

  •   

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

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

答案 2 :(得分:0)

在您不能与客户一起使用hasOne()的情况下,可以使用invice hasOne(customer),因为客户有许多发票,因此面糊将hasOne()与发票一起使用,并将batteryTo()与客户一起使用。 例如发票模型    hasOne(客户)

在客户模型中    EmiratesTo(发票)

答案 3 :(得分:0)

这取决于哪个表具有外键。

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

所有者可以拥有一辆汽车。 该汽车可以由一位所有者拥有。

因此,所有者拥有一辆汽车,而该汽车属于Ownwe。因此,外键将放入“汽车”中。汽车需要知道它属于谁。

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