当前位置: 首页 > 知识库问答 >
问题:

在laravel中使用"with"方法建立更深层次的关系模型

桑坚
2023-03-14

我有以下型号

  • 订单(id,编号)
  • 细节(id、item_id、计数、user_id等)
  • 项目(id,名称)
  • 猫(id,名称)
  • 用户(id, name)在我的情况下不重要

每个订单都有很多细节

每个细节都属于项目

每个项目都属于一个类别

每个细节都属于用户

我写了这行代码

 public function show(Order $order)
{
    //

    $orders= $order->details()->with(['item','user'])->get();
    return response()->json(['details'=>$orders],200);
}

要获得这样的响应:

"details": [
        {
            "id": 3089,
            "count": 3,
            "item_id": 102,
            "order_id": 1,
            "user_id": 10,
            "created_at": "2019-11-22 22:19:23",
            "updated_at": "2019-11-22 22:19:23",
            "user": {
                "id": 10,
                "name": "Ms. Eda Stoltenberg DVM",
                "username": "Brandy Murazik",
                "verified": "1",
                "verification_token": null,
                "status": "1",
                "dept_id": 5,
                "created_at": "2019-11-22 22:15:47",
                "updated_at": "2019-11-22 22:15:47"
            },
            "item": {
                "id": 102,
                "code": "Lamar Hansen",
                "cat_id": 91,
                "created_at": "2019-11-22 22:15:54",
                "updated_at": "2019-11-22 22:15:54"
            }
        },
        {
            "id": 3428,
            "count": 1,
            "item_id": 15,
            "order_id": 1,
            "user_id": 10,
            "created_at": "2019-11-22 22:19:41",
            "updated_at": "2019-11-22 22:19:41",
            "user": {
                "id": 10,
                "name": "Ms. Eda Stoltenberg DVM",
                "username": "Brandy Murazik",
                "verified": "1",
                "verification_token": null,
                "status": "1",
                "dept_id": 5,
                "created_at": "2019-11-22 22:15:47",
                "updated_at": "2019-11-22 22:15:47"
            },
            "item": {
                "id": 15,
                "code": "Hilario Dicki",
                "cat_id": 20,
                "created_at": "2019-11-22 22:15:51",
                "updated_at": "2019-11-22 22:15:51"
            }
        },
        {
            "id": 3493,
            "count": 1,
            "item_id": 129,
            "order_id": 1,
            "user_id": 6,
            "created_at": "2019-11-22 22:19:45",
            "updated_at": "2019-11-22 22:19:45",
            "user": {
                "id": 6,
                "name": "Prof. Marina Kiehn",
                "username": "Nickolas Hessel",
                "verified": "0",
                "verification_token": "mwWkL95jjyi5di9PSH3T3LXXZEE1W2DmegTxAOtN",
                "status": "1",
                "dept_id": 3,
                "created_at": "2019-11-22 22:15:47",
                "updated_at": "2019-11-22 22:15:47"
            },
            "item": {
                "id": 129,
                "code": "Dr. Donnell Harber",
                "cat_id": 54,
                "created_at": "2019-11-22 22:15:55",
                "updated_at": "2019-11-22 22:15:55"
            }
        },
        {
            "id": 4032,
            "count": 1,
            "item_id": 221,
            "order_id": 1,
            "user_id": 8,
            "created_at": "2019-11-22 22:20:10",
            "updated_at": "2019-11-22 22:20:10",
            "user": {
                "id": 8,
                "name": "Prof. Thaddeus Boehm",
                "username": "Frederick Kshlerin",
                "verified": "1",
                "verification_token": null,
                "status": "1",
                "dept_id": 3,
                "created_at": "2019-11-22 22:15:47",
                "updated_at": "2019-11-22 22:15:47"
            },
            "item": {
                "id": 221,
                "code": "Maia Hettinger V",
                "cat_id": 57,
                "created_at": "2019-11-22 22:15:58",
                "updated_at": "2019-11-22 22:15:58"
            }
        },
        {
            "id": 4311,
            "count": 1,
            "item_id": 139,
            "order_id": 1,
            "user_id": 3,
            "created_at": "2019-11-22 22:20:21",
            "updated_at": "2019-11-22 22:20:21",
            "user": {
                "id": 3,
                "name": "Cletus Walter I",
                "username": "Johan Kemmer",
                "verified": "0",
                "verification_token": "M6MWe7mOmzcyM0rrlbMwVCX7q2vyULFKwSAJmQwl",
                "status": "0",
                "dept_id": 5,
                "created_at": "2019-11-22 22:15:46",
                "updated_at": "2019-11-22 22:15:46"
            },
            "item": {
                "id": 139,
                "code": "Tanner Schimmel",
                "cat_id": 80,
                "created_at": "2019-11-22 22:15:55",
                "updated_at": "2019-11-22 22:15:55"
            }
        },
        {
            "id": 4821,
            "count": 2,
            "item_id": 243,
            "order_id": 1,
            "user_id": 1,
            "created_at": "2019-11-22 22:20:41",
            "updated_at": "2019-11-22 22:20:41",
            "user": {
                "id": 1,
                "name": "Mrs. Fay Cassin",
                "username": "Ryley Bode",
                "verified": "0",
                "verification_token": "E93hzJbIp2eCxbBGgtcsYDckRreASTPL6ZEAyyKP",
                "status": "1",
                "dept_id": 1,
                "created_at": "2019-11-22 22:15:46",
                "updated_at": "2019-11-22 22:15:46"
            },
            "item": {
                "id": 243,
                "code": "Miss Jaida Simonis DVM",
                "cat_id": 53,
                "created_at": "2019-11-22 22:15:59",
                "updated_at": "2019-11-22 22:15:59"
            }
        }
    ]

但我还需要在item对象中获取category对象,这已经是关系,item属于category我知道我可以进行连接查询,但我更喜欢使用基于模型之间关系的最佳解决方案

如果可能的话,我该怎么做呢?

谢啦

共有1个答案

曾实
2023-03-14

您可以尝试此操作(因为项目属于以下类别):

$orders = $order->details()->with(['item.category', 'user'])->get();
 类似资料:
  • 本文向大家介绍laravel ORM关联关系中的 with和whereHas用法,包括了laravel ORM关联关系中的 with和whereHas用法的使用技巧和注意事项,需要的朋友参考一下 with 渴求式预加载 可以有效的避免 N+1 问题,用法如下: 如果有多个关联关系可以用“,”隔开,还可以使用闭包来对关联关系进行限制,向下面这样: 结果会查找所有的用户,返回的每个用户信息中都会多一个

  • 我正试图与我的订阅建立另一种关系,第一种是用户,它是付费模式,工作正常,另一种是地点,这是用户拥有的地点。 我创建了一个迁移,该迁移添加了place\u id: 我找不到订阅的方法-

  • 我试图在Laravel Eloquent ORM中使用方法调用,但是得到了以下错误。

  • 这是我的场景(使用一个完全虚构的应用程序): Joe注册了“contests R Us”,这将帮助用户为其业务创建新的比赛 乔让人们亲自报名参加比赛(有些人不会使用电脑) 然后,Joe使用“Contests R Us”为每个注册并填写其信息(名、姓、电话)的人创建一个新的。这是将从中抽取胜利者的人才库。 一些亲自报名的人想要检查他们是否赢了,所以在“Contests R Us”创建一个新的用户帐户

  • 问题内容: 我有以下实体关系问题。一个“游戏”必须有两个(只有两个)“团队”对象。一个“团队”可以有很多“游戏” 据我所知,这是一对多关系。但是…我不知道如何在JPA中对此建模。例如,我打算做这样的事情… 但是,正如您所看到的,我不确定如何从注释侧将表链接在一起。有人曾经做过这样的事情吗?有什么想法吗? 非常感谢! 问题答案: 我希望有人能提出一个很棒的解决方案,但是这是一个棘手的情况,我从未能找

  • 我试图找到一种不同的方法来将给定的模型及其关系保存/更新到数据库中。 基本上,我有一个“作者”页面的表单,可以添加多个“书籍”。自然,“作者”和“书籍”模型有一对多的关系。 根据laravel官方教程,您必须: 将所有输入数据添加到"作者"模型 创建并保存作者模型到DB 对于每个"Book"输入数据 创建并保存每个书模型到DB使用$作者- Laravel还指出,“有时你可能不仅希望保存一个模型,还