1

私はかなり複雑なクエリでLaravel 4でページネーションを使用しようとしています(Fluentクエリビルダーを使用していると思います)。

クエリ SQL コード

SELECT `description`, `email`, `website`, `telephone`, `purpose`, `services`,      
       `eligibilitycriteria`, `meetingplace`, `servicecosts`, `area`, 
       `servicetype`, `beneficiarytype`, `charitynumber`, `address`, `contacts`, 
MATCH (
       `name`,`description`,`email`,`website`,`telephone`,`purpose`,`services`,
       `eligibilitycriteria`,`meetingplace`,`servicecosts`,`area`,`servicetype`,
       `beneficiarytype`,`charitynumber`,`address`,`contacts`
      ) 
AGAINST ("dan") AS Score0, 
MATCH (`name`) AGAINST ("dan") AS Score1 FROM `directory_cache`   
WHERE MATCH(
       `description`,`email`,`website`,`telephone`,`purpose`,`services`,
       `eligibilitycriteria`,`meetingplace`,`servicecosts`,`area`,`servicetype`,
       `beneficiarytype`,`charitynumber`,`address`,`contacts`
      ) 
AGAINST ("dan") 
ORDER BY (Score0*1 + Score1*1.5) DESC  

次のように、コントローラーのクエリビルダーの最後でページネーションを呼び出しています。

$results = $query->paginate(20);

次に、私の見解では、単に呼び出すだけで$results->links、次のページのページネーションボタンと番号付きページなどを取得します.

しかし、ページ 2 をクリックすると、ここで問題が発生します。

私のフォームは POST を使用して検索フォームを送信します。get アクションと post アクションの両方で、同じビュー ファイルを使用して検索フォームと結果を表示します。

助けてください。さらに情報が必要な場合は、投稿を編集して追加させていただきます。私は一晩中ここにいます!

4

2 に答える 2

0

GET を使用するか、クエリをセッションに保存する必要があります。これを行う簡単な方法はありません。とにかく、あなたのように POST を使用するのは悪い習慣です。GET パラメーターを渡すか、クエリをセッションに保持するかのいずれかで、POST を実行してそこからリダイレクトする必要があります。

function post_search() {
    $query = DirectoryCache::where(...)->where(...);
    Session::put('searchQuery', $query);

    return Redirect::to_action('controller@viewResults');
}

function get_viewResults($page = 1) {
    $perPage = 20;

    $query = Session::get('searchQuery', DirectoryCache::where(1, '=', 1));
    $query = $query->paginate();
    $query->skip($page * $perPage)->take($perPage);

    $results = $query->get(); 
    ...
}

Laravel 3 であることはわかっています。4 にはまだ触れていませんが、API はほぼ同じはずです。

于 2013-09-05T17:28:00.403 に答える