簡體   English   中英

Laravel sortByDesc 和 Paginate 關系

[英]Laravel sortByDesc and Paginate on a relationship

如何在此處對結果進行分頁並保持排序順序。

public function show(Language $language)
{
    $questions = Question::with(['translations' => function($q) use ($language) {
        $q->where('language_id', $language->id);
    }])->get()->sortByDesc('translations');

    return view('language.show', compact('questions', 'language'));
}

現在,如果我嘗試通過這樣做進行分頁,我會收到一條錯誤消息:調用未定義的方法 Illuminate\Database\Eloquent\Builder::sortByDesc()

$questions = Question::with(['translations' => function($q) use ($language) {
    $q->where('language_id', $language->id);
}])->sortByDesc('translations')->Paginate(20);

我也從這篇文章中嘗試過: 如何在 laravel 中使用 pangination 和 sortByDesc 功能?

$questions = Question::with(['translations' => function($q) use ($language) {
    $q->where('language_id', $language->id);
}])->Paginate(20);
$questions->setCollection($questions->sortByDesc('translations'));

這種工作是因為我按排序順序獲得了分頁結果,但這不是我想要的。 我希望所有問題首先按是否有翻譯進行排序,然后進行分頁。

請注意,翻譯不是一列,它只是查詢的結果,所以我不能按照我鏈接的帖子中的建議使用 SQL。

有問題的關系 model。

public function translations()
{
    return $this->hasMany('App\QuestionTranslation');
}

排序關系對主model的順序沒有影響。 通過第二個查詢檢索關系,該查詢發生在檢索主 model 之后。

但是,您可以join

public function show(Language $language)
{
    $questions = Question::selectRaw('questions.*, translations.id')
         ->leftJoin('translations', function ($join) use ($language) {
              $join->on('questions.id', '=', 'translations.question_id') 
                   ->andOn('translations.id', '=', $language->id);
              })
         ->orderBy('translations.id') // NULLs should appear last
         ->paginate(20);

    return view('language.show', compact('questions', 'language'));
}
private $limit = 10;

public function show(Language $language)
{

    $questions = Question::with(['translations' => function($q) use ($language) {
              $q->where('language_id', $language->id);
          }]);
    $data = $questions->paginate($this->limit);

    $data->sortByDesc('translations');

    return view('language.show', $data);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM