让我们考虑“公司”和“员工”模型的简单场景。
一家公司有很多员工。现在,当我在Laravel中绘制这种关系时,下面的正确方法是什么?
方法1:
Employee belongsTo() Company
和Company hasMany() Employee
方法2:
Company belongsToMany() Employee
和Employee hasOne() Company
基本上,belongsTo()-hasMany()
和belongsToMany()-hasOne()
之间有什么区别?
答案 0 :(得分:1)
有三种不同的方法,在你的问题中,你将它们混合起来。我会仔细阅读所有这些内容。
在您的示例中,多对多关系意味着公司可以拥有多名员工和,员工可以为多家公司工作。
因此,当您在关系上使用belongsToMany()
方法时,这意味着您有一个数据透视表。默认情况下,Laravel假定此表以两个表命名,例如示例中为company_employee
。 Company
模型和Employee
模型都会有belongsToMany()
个关系。
然而,使用hasMany()
意味着它是一对多的关系。如果我们再看一下这个例子,公司可能会有很多员工,但每个员工只能由一家公司雇用。
在模型中,这意味着Company
在其关系声明中会有hasMany()
方法,而Employee
会有belongsTo()
方法。
最后,hasOne()
意味着它是一对一的关系。在您的示例中,意味着每个公司可能只有一名员工。由于hasOne()
的倒数也是belongsTo()
,在这种情况下,每个员工也只能由一家公司雇用。
Company
模型将采用hasOne()
关系方法,Employee
采用belongsTo()
方法。
在实践中,您几乎总是希望构建一个尽可能接近现实的数据库。您使用什么关系取决于您的案例。在这个例子中,我猜你想要一个多对一的方法,在employees表上有一个外键,引用公司表上的id。但最终,这取决于你。希望有所帮助。 :)