如何使用父模型订购 laravel 雄辩的查询?我的意思是我有一个雄辩的查询,我想在不使用连接关系的情况下按其父级排序查询?我使用了 whereHas 和 order by ,但没有用。
这是我的代码示例:
$query = Post::whereHas('users')->orderBy('users.created_at')->get();
如果您想Post按列user排序,则必须以某种方式进行连接,除非您在检索结果后进行排序,因此:
Post
user
$query = Post::select('posts.*') ->join('users', 'users.id', 'posts.user_id') ->orderBy('users.created_at')->get();
请注意,whereHas不再需要,因为联接(默认情况下是内部联接)只会导致具有用户的帖子。
whereHas
或者,您可以这样做:
$query = Post::has('users') ->with('users') ->get() ->sortBy(function ($post) { return $post->users->created_at; });
原因是雄辩的关系是在与获取父模型的查询不同的查询中查询的,因此您不能在该查询期间使用关系列。
嗯,我找到了我想要的。
Post::query() ->has('users') ->orderBy( User::select('created_at') ->whereColumn('id', 'posts.user_id') ->orderBy('created_at') ) ->get();