Laravel惯性返回所有列数有限的所有帖子,并通过belongsTo关系添加用户

问题描述

使用Laravel,惯性和Vue,我想返回索引中仅包含必要列的所有帖子,但我想从belongsTo关系中添加用户

这是我尝试过的

测试之一:添加用户

   return Inertia::render('Posts/Index',[
            'posts' => Post::with('user')->get()->all('id','abstract','created_at')
        ]);
    

这将返回包括关系中的用户在内的所有帖子,但将返回帖子中的所有列

测试2:过滤列

   return Inertia::render('Posts/Index',[
            'posts' => Post::all('id','created_at')
        ]);
    

这将返回所有只有id,abstract和created_at列的帖子

Test 3: ordered with user


return Inertia::render('Posts/Index',[
    'posts' => Post::orderBy('created_at','DESC')->with('user')->get()
]);
    

这将返回按用户和所有列排序的所有帖子

我的问题是如何返回仅包含选定列的所有帖子,对其进行排序并从belongsTo关系添加用户

解决方法

最后,这是解决方案,但是我只是在用户对象上传递了名称(这正是我真正需要的名称)。

return Inertia::render('Posts/Index',[
   // 'posts' => Post::orderBy('created_at','DESC')->with('user')->get()
   'posts'=>Post::select('id','title','abstract','created_at')
   ->addSelect([
       'user'=>User::select('name')
       ->whereColumn('id','posts.user_id')

并用于传递用户的几列

 return Inertia::render('Posts/Index',[
            // 'posts' => Post::orderBy('created_at','DESC')->with('user')->get()
            'posts' => Post::select('id','created_at')
                ->addSelect([
                    'userfirstname' => User::select('firstname') ->whereColumn('id','posts.user_id'),'userlastname' => User::select('familyname') ->whereColumn('id','posts.user_id')  
                ])
                ->orderBy('created_at','DESC')
                ->get()
        ]);
   ])
   ->orderBy('created_at','DESC')
   ->get()
]);