我在数据库中有很多关系,看起来像 用户->用户公司->公司。
我的问题是,就我们的业务逻辑而言,这应该是一对一的关系,但是纠正此问题将需要大量工作。在数据透视表中,用户只有一个条目。
当前在用户模型上我正在执行此操作,但是它返回一个模型而不是一个关系实例。
// 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
答案 0 :(得分:1)
有可能,但是您实际上必须深入研究核心并构建自己的自定义解决方案(关系查询生成器)。
首先想到的是一种hasOneThrough
关系方法。不幸的是,这并不存在。我的建议是找到一个可靠的软件包来完成此任务。
实际上,我能够找到此软件包:https://github.com/riesjart/relaquent
否则,除非您的数据库架构完全混乱,否则将company_id
添加到users
表中,然后编写sql迁移脚本至少不会很复杂。希望这会有所帮助。