Laravel-数据库关系



让我们考虑一个"公司"和"员工"模型的简单场景。

一家公司有很多员工。现在,当我在拉拉维尔中绘制这种关系时,从以下角度来看,正确的方法是什么?

方法1:

Employee belongsTo() CompanyCompany hasMany() Employee

方法2:

Company belongsToMany() EmployeeEmployee hasOne() Company

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

有三种不同的方法,在你的问题中,你把它们混在一起了。我将介绍所有这些。

对多

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

因此,当您对关系使用 belongsToMany() 方法时,这意味着您有一个数据透视表。默认情况下,Laravel假设此表以其他两个表命名,例如 company_employee示例中。然后,Company模型和Employee模型都将具有belongsToMany()关系。

多对一

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

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

一对一

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

然后,Company模型将具有hasOne()关系方法,而Employee具有belongsTo()方法。


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

相关内容

  • 没有找到相关文章

最新更新