一尘不染

如何在不使用 laravel 连接关系的情况下通过 eloquent 查询进行排序?

php

如何使用父模型订购 laravel 雄辩的查询?我的意思是我有一个雄辩的查询,我想在不使用连接关系的情况下按其父级排序查询?我使用了 whereHas 和 order by ,但没有用。

这是我的代码示例:

$query = Post::whereHas('users')->orderBy('users.created_at')->get();

阅读 77

收藏
2022-07-25

共2个答案

一尘不染

如果您想Post按列user排序,则必须以某种方式进行连接,除非您在检索结果后进行排序,因此:

$query = Post::select('posts.*')
             ->join('users', 'users.id', 'posts.user_id')
             ->orderBy('users.created_at')->get();

请注意,whereHas不再需要,因为联接(默认情况下是内部联接)只会导致具有用户的帖子。

或者,您可以这样做:

$query = Post::has('users')
    ->with('users')
    ->get()
    ->sortBy(function ($post) { return $post->users->created_at; });

原因是雄辩的关系是在与获取父模型的查询不同的查询中查询的,因此您不能在该查询期间使用关系列。

2022-07-25
一尘不染

嗯,我找到了我想要的。

Post::query()
      ->has('users')
      ->orderBy(
        User::select('created_at')
            ->whereColumn('id', 'posts.user_id')
            ->orderBy('created_at')
      )
      ->get();
2022-07-25