在 Laravel 中的 with() 之后的另一个模型中的 OrderBy

我有一个问题,我正在尝试按链接表中的日期对请求进行排序。我在一对多中有一个名为 User 的表和另一个名为 Posts 的表。


User::with('posts')

    ->where('last_name', 'like', $search['lastname'] . '%')

    ->where('first_name', 'like', $search['firstname'] . '%')

    ->where('email', 'like', '%' . $search['email'] . '%')

    ->whereHas('posts', function ($query) use ($search) {

        $query->where('reference', 'like', $search['reference'] . '%')

            ->orderBy('date', 'asc');

    })

    ->orderBy('posts.date', 'desc')

    ->paginate(15);

我怎样才能做到这一点 ?


慕工程0101907
浏览 350回答 2
2回答

慕虎7371278

目前用户是主要实体,因此帖子的排序将在该用户的帖子中进行,而不是在所有帖子中全局排序。我猜您想进行全局排序,这意味着帖子应该按日期排序试试这个在用户类中添加一个新关系class User extends Model {  public function rpost() {    return $this->belongsTo(\where\ever\posts::class, 'user_id', 'id');    //inverse mapping from user --> posts table    //assuming posts table is using user_id column to track the ownership    //and user table has id as it's primary key  }}然后修改你的代码User::with('rpost')    ->select('posts.title'.'posts.id', 'users.name',             \DB::raw('(SELECT posts.date FROM posts WHERE user.id = posts.user_id ) as sort'))    ->where('last_name', 'like', $search['lastname'] . '%')    ->where('first_name', 'like', $search['firstname'] . '%')    ->where('email', 'like', '%' . $search['email'] . '%')    ->whereHas('posts', function ($query) use ($search) {        $query->where('reference', 'like', $search['reference'] . '%');    })    ->orderBy('sort')    ->paginate(15);

智慧大石

您可以使用 sortBy $users = User::with('posts')->get()  ->sortBy(function($user) {      return $user->posts->created_at;  })或者您可以将这样的连接与 orderBy 一起使用  $query = User::where('last_name', 'like', $search['lastname'] . '%')->where(        'first_name',        'like',        $search['firstname'] . '%'    )->where('customers.email', 'like', '%' . $search['email'] . '%');    $query = $query->join('posts', 'posts.user_id','=','users.id');    $query = $query->select('posts*','users.*');    $query = $query->orderBy('posts.created_at','asc');    $record = $query->get();
打开App,查看更多内容
随时随地看视频慕课网APP