【问题标题】:Laravel 5.4 collection sortByDesc not workingLaravel 5.4 集合 sortByDesc 不工作
【发布时间】:2022-01-26 17:02:55
【问题描述】:

我有两个关于 Eloquent 的查询,我收集并合并它们,然后我做了 sortByDesc 但它不是排序集合。

$f_games = collect(Game::with('fUser', 'sUser')->where('first_user_id', Auth::user()->id)>get());
$s_games = collect(Game::with('fUser', 'sUser')->where('second_user_id', Auth::user()->id)->get());

$response = $f_games->merge($s_games)->sortByDesc('id');

【问题讨论】:

    标签: php laravel-5 collections


    【解决方案1】:

    您可以在排序结束时使用values(),如documentation 中所述

    $gameCollection = collect($game);
    
    $sorted = $gameCollection->sortByDesc('date');
    
    return $sorted->values()->all();
    

    在你的情况下应该是

    $response = $f_games->merge($s_games)->sortByDesc('id')->values();
    

    【讨论】:

      【解决方案2】:

      无需包装collect()$f_games$s_games 将被收集而无需额外包装:

      $f_games = Game::with('fUser', 'sUser')->where('first_user_id', Auth::user()->id)>get();
      $s_games = Game::with('fUser', 'sUser')->where('second_user_id', Auth::user()->id)->get();
      $response = $f_games->merge($s_games)->sortByDesc('id');
      

      但最好的方法是:

      $user_id = Auth::user()->id;
      
      $f_s_games = Game::with('fUser', 'sUser')
                   ->where('first_user_id', $user_id)
                   ->orWhere('second_user_id',$user_id)
                   ->orderBy('id', 'desc')
                   ->get();
      

      【讨论】:

        【解决方案3】:

        sortByDesc 方法按属于模型中某些 eloquent 关系的字段对集合进行排序。

        如果您尝试使用 sortByDesc 为模型本身(您当前的模型对象)排序集合,请使用 orderBy 而不是 sortByDesc

        示例

        对于模型本身

        {$collection_list = $this->model_name->orderBy('field_name','DESC')->get();}
        

        对于将在视图中延迟加载的关系

        {$collection_list = $this->model_name->get()->sortBy('table_name.field_name', SORT_REGULAR, true);}
        

        注意sortByDesc 内部调用sortBy(),降序排列, true 表示降序,false 表示升序。

        【讨论】:

          猜你喜欢
          • 2017-10-25
          • 2017-10-17
          • 1970-01-01
          • 1970-01-01
          • 2017-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多