繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM