Laravel - 数据库关系

时间:2014-12-09 12:10:03

标签: laravel model database-relations

让我们考虑“公司”和“员工”模型的简单场景。

一家公司有很多员工。现在,当我在Laravel中绘制这种关系时,下面的正确方法是什么?

方法1:

Employee belongsTo() CompanyCompany hasMany() Employee

方法2:

Company belongsToMany() EmployeeEmployee hasOne() Company

基本上,belongsTo()-hasMany()belongsToMany()-hasOne()之间有什么区别?

1 个答案:

答案 0 :(得分:1)

有三种不同的方法,在你的问题中,你将它们混合起来。我会仔细阅读所有这些内容。

许多对多

在您的示例中,多对多关系意味着公司可以拥有多名员工,员工可以为多家公司工作。

因此,当您在关系上使用belongsToMany()方法时,这意味着您有一个数据透视表。默认情况下,Laravel假定此表以两个表命名,例如示例中为company_employeeCompany模型和Employee模型都会有belongsToMany()个关系。

许多对一

然而,使用hasMany()意味着它是一对多的关系。如果我们再看一下这个例子,公司可能会有很多员工,但每个员工只能由一家公司雇用。

在模型中,这意味着Company在其关系声明中会有hasMany()方法,而Employee会有belongsTo()方法。

一对一的

最后,hasOne()意味着它是一对一的关系。在您的示例中,意味着每个公司可能只有一名员工。由于hasOne()的倒数也是belongsTo(),在这种情况下,每个员工也只能由一家公司雇用。

Company模型将采用hasOne()关系方法,Employee采用belongsTo()方法。


在实践中,您几乎总是希望构建一个尽可能接近现实的数据库。您使用什么关系取决于您的案例。在这个例子中,我猜你想要一个多对一的方法,在employees表上有一个外键,引用公司表上的id。但最终,这取决于你。希望有所帮助。 :)