如何在laravel中查询只获取多关系数据

eh57zj3b  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(117)

我遇到了一个类似这样的问题,但是还没有找到解决的方法。希望大家能帮忙,非常感谢!!!我只想得到每个表所需要的数据,然后返回一个json,如下所示:

    • 我需要此输出**
"data" : [
    {
      {
          "id": 1,
          "user" : {
            "name" : "string"
          },
          "package" : {
            "name" : "string"
          },
          "clinic" : {
            "name" : "string",
            "address" : "string"
          }
          "doctor": {
            "name" : "string"
          },
          "appointment_date": 1671693012,
          "amount": "150.00"
      }     
    }

我的代码:

$data = Ticket::with('package')->with('user')->with('clinic')->with('doctor')->get();
    return response()->json([
        [
            'status'=>200, 
            'body'=> [
                'limit' => $request->limit,
                'offset' => $request->offset,
                'data' => $data
            ]
        ]
    ], 200);

请帮帮我,我卡住了,谢谢!!!

qvk1mo1f

qvk1mo1f1#

您可以在关系名称之后添加要获取的列,并使用:分隔它们;如果需要多列,则可以使用,分隔它们

$data = Ticket::with('package:id,name')->with('user:id,name')->with('clinic:id,name,address')->with('doctor:id,name')->get();

请注意,只有在包含表的primary key时,它才能工作,因此json将生成如下内容:

{
    "doctor": {
        "id": 1,
        "name": "Doctor Name"
    },
    "clinic": {
        "id": 1,
        "name": "clinic name"
        "address": "clinic address"
    }
}
    • 编辑#1**

如果你想删除id,你可以使用Eloquent Resources修改结果,但我不知道这是否是一个好主意。
创建新资源

php artisan make:resource TicketResource

然后将其修改为如下形式:

public function toArray()
{
    return [
        ... // the ticket information
        "doctor" => [
            "name" => $this->doctor->name,
        ],
        "clinic" => [
            "name" => $this->clinic->name,
            "address" => $this->clinic->address,
        ],
    ];
}

如果使用它而不是返回$data,则应在new TicketResource($data)内部传递$data

$data = Ticket::with('package:id,name')->with('user:id,name')->with('clinic:id,name,address')->with('doctor:id,name')->get();

return response()->json([
        [
            'status'=>200, 
            'body'=> [
                'limit' => $request->limit,
                'offset' => $request->offset,
                'data' => new TicketResource($data)
            ]
        ]
    ], 200);

相关问题