【问题标题】:Laravel Relation based on JSON基于 JSON 的 Laravel 关系
【发布时间】:2019-11-19 23:02:42
【问题描述】:

我已经阅读了关于使用 json 数组建立关系的帖子/答案,但是对于这个平台来说,我正在努力让一个作品发挥作用。寻找一些输入。

我有用户和服务的模型/类/表

用户表:

------------------------------
id | name      | serviceProvided_id
------------------------------
 1   User1       1
 2   User2       2

服务表:

--------------------------
id |    name         |  icon
--------------------------
 1  Service1           1.jpg
 2  Service2           2.jpg
 3  Service3           3.jpg
 4  Service4           4.jpg
 5  Service5           5.jpg

用户模型

    public function serviceProvided()
    {
        return $this->belongsTo(Service::class,'serviceProvided_id','id');
    }

当我从 UserController 获取用户时,我可以用它返回 Service 的关系:

User::with('serviceProvided')

完美运行。我现在想做的是使 servicesProvided 成为一个以上的值,并且仍然能够使用用户加载所有这些。

我在想 User 表看起来像这样:

------------------------------
id | name      | serviceProvided_id
------------------------------
 1   User1       [1,2,3]
 2   User2       [1,3,5]

我从 Jonas S (https://github.com/staudenmeir/eloquent-json-relations) 读到了一个包,但我一直卡在那个包中,它似乎不需要一个专门的列,但其他一些列中有键/值?我很困惑,如果能得到任何帮助,我将不胜感激。

谢谢, 周杰伦

【问题讨论】:

  • 您需要一个用于 n:n 关系的数据透视表
  • 是的,创建一个数据透视表并定义多对多关系。看看docs
  • 好的。因此,如果我有 7 或 8 个其他模型根本没有在此处列出,请对 Services 表进行引用(或多个引用).. 它仍然是我创建所有这些额外数据透视表的最佳方法吗?

标签: laravel laravel-6


【解决方案1】:

简单的方法是按照您的建议建立 belongsToMany 关系。但是,如果您想从您的方法中实现,那么您可以这样做

$user=User::find(1);
foreach($user->serviceProvided_id as $service)
{
$services[]=$service->serviceProvided->name;
}
dd($services);

【讨论】:

    猜你喜欢
    • 2021-07-20
    • 2021-03-09
    • 2021-08-30
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多