我正在尝试编写一个查询,我可以在其中返回一组具有相关用户的帖子。基本上,我想返回类似于 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');
}
答案 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,
];
}
}