[英]Return a one to one relationship instance when database is many to many
我在数据库中有许多关系,看起来像User-> user_companies-> company。
我的问题是,就我们的业务逻辑而言,这应该是一对一的关系,但是要纠正这一点将需要大量工作。 在数据透视表中,用户永远只有一个条目。
当前在用户模型上,我正在执行此操作,但是它返回一个模型而不是一个关系实例。
// returns relationship instance
public function companies()
{
return $this->belongsToMany('App/Company', 'user_companies');
}
// returns model
public function company()
{
return $this->companies()->first();
}
在数据库设置多对多的情况下,我是否可以模仿一对一关系的行为?
更新:
Laravel现在开箱即用地添加了一个HasOneThrough
关系。 https://laravel.com/docs/5.8/eloquent-relationships#has-one-through
有了这个,这是有可能的,但您实际上必须深入研究核心并构建自己的自定义解决方案(关系查询生成器)。
首先想到的是hasOneThrough
关系方法。 不幸的是,这并不存在。 我的建议是找到一个可靠的软件包来完成此任务。
实际上,我能够找到此包: https : //github.com/riesjart/relaquent
否则,除非您的数据库架构是一团糟,否则,至少要在您的users
表中添加company_id
然后编写sql迁移脚本就不会很复杂。 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.