2017-04-18 7 views
1

私は正常に動作2つのクエリ結果のマージを持っている:Laravelでget()の後にコレクションを改ページする方法は?

$events1 = \App\Event::Where('valid_to','>=',$today)->orderByRaw('valid_to','ASC')->get(); 
$events2 = \App\Event::Where('valid_to','<',$today)>orderByRaw('valid_to','ASC')->get(); 
$events = $events1->merge($events2); 

は今、私はこの新しいコレクションをページ分割する必要があるとsuggesttedとして、私はこの作品を追加しました:

$page = 1; 
$perPage = 60; 
$pagination = new \Illuminate\Pagination\LengthAwarePaginator(
    $events->forPage($page, $perPage), 
    $events->count(), 
    $perPage, 
    $page 
); 

EDIT:将来の読者のために、パトリスの答えはすばらしく、私はそれをしました。

答えて

4

あなたは、間違ったオブジェクトにlinks()render()を呼び出しています。あなたは$pagination変数にページネーターを割り当てました。あなたは少し、これをクリーンアップしたい場合は、一つだけのクエリを持ってないように、あなたはあなたのクエリを変更することができ、また

$pagination->links() 

または

$pagination->render() 

を呼び出すべきです2つの異なる結果セットを組み合わせる必要があります。日付比較の結果を最初に注文してから、valid_toフィールドに注文するだけです。

$events = \App\Event::orderByRaw('valid_to < ?', [$today])->orderBy('valid_to')->get(); 

日付比較で真偽の結果が返されます。 ASC順(指定されていない場合のデフォルト)では、falseの結果の後にtrueの結果が返されるため、が$today(期限切れ)未満の行は、valid_to$today以上の行になります。

この結果セットは、valid_toフィールド自体によって注文されます。この1つのクエリでは、手動でマージした2つのクエリと同じ結果が得られます。そして、もちろん、あなたはこの1つのだけのクエリをページ分割することができます

$events = \App\Event::orderByRaw('valid_to < ?', [$today])->orderBy('valid_to')->paginate(60); 

さて、それはあなたが$events->links()$events->render()を使用したいと思うので、ページ分割され、あなたの$eventsオブジェクトです。

+0

お返事ありがとうございます。私はそれを行い、$ page = 1が動作する限り、$ page = 2をデバッグするときに何かがうまくいかず、「非オブジェクトのプロパティを取得しようとしています(View:...」)どの非オブジェクトが問題を引き起こしているのかを探そうとしています。 – user7432810

関連する問題