Laravel 返回与原始查询的关系

时间:2021-07-07 22:33:24

标签: php mysql laravel eloquent laravel-query-builder

我正在尝试编写一个查询,我可以在其中返回一组具有相关用户的帖子。基本上,我想返回类似于 with() 使用 Eloquent 所做的事情,但相反,我想使用 raw() 查询来实现它。目前,我正在做如下事情:

DB::select('SELECT * FROM posts LEFT JOIN users ON posts.user_id = users.id'); 

我在一个深度为 0 的对象中获得结果,我希望用户位于内部的一个单独对象中,以便我可以像 post.user.name 一样访问它。我希望我的回复如下

[
    {
        "id": 1,
        "name": "Praesentium molestiae",
        "status": 1,
        "type": 1,
        "author": {
             "name": "John Doe",
             "email": "johndoe@email.com"
        }
    },
...

用户模型

public function posts() 
{
    return $this->hasMany('App\Post','user_id');
}

帖子模型

public function user() 
{
    return $this->belongsTo('App\User');
}

1 个答案:

答案 0 :(得分:0)

制作一个帖子资源来处理这个问题

PostController

<?php

  namespace App\Http\Controllers;

  use App\Http\Resources\PostResource;
  use App\Models\Post;
  use Illuminate\Http\Request;

  class PostController extends Controller
  {
    public function index()
    {
     return PostResource::collection(Post::latest()->get());
    }
  }

帖子资源

<?php

  namespace App\Http\Resources;

  use Illuminate\Http\Resources\Json\JsonResource;

  class PostResource extends JsonResource
  {
   /**
   * Transform the resource into an array.
   *
   * @param  \Illuminate\Http\Request  $request
   * @return array
   */
   public function toArray($request)
   {
     return [
        'id' => $this->id,
        'name' => $this->name,
        'status' => $this->status,
        'type' => $this->type,
        'author' => $this->user,
    ];
   }
}