当数据库多对多时返回一对一关系实例

时间:2018-08-14 14:31:36

标签: php laravel laravel-5

我在数据库中有很多关系,看起来像 用户->用户公司->公司。

我的问题是,就我们的业务逻辑而言,这应该是一对一的关系,但是纠正此问题将需要大量工作。在数据透视表中,用户只有一个条目。

当前在用户模型上我正在执行此操作,但是它返回一个模型而不是一个关系实例。

// 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

1 个答案:

答案 0 :(得分:1)

有可能,但是您实际上必须深入研究核心并构建自己的自定义解决方案(关系查询生成器)。

首先想到的是一种hasOneThrough关系方法。不幸的是,这并不存在。我的建议是找到一个可靠的软件包来完成此任务。

实际上,我能够找到此软件包:https://github.com/riesjart/relaquent

否则,除非您的数据库架构完全混乱,否则将company_id添加到users表中,然后编写sql迁移脚本至少不会很复杂。希望这会有所帮助。

相关问题