2017-09-18 8 views
0

Laravel 5.5アプリには多くのAPIリソースがあります。これまでのところ素晴らしいものですが、ページネーションリンクでURLパラメータを永続させるのに問題があります。APIにパラメータを追加するLaravelのリソースリンク

が URLの下の例を参照してください:?/投稿を未審査=真

public function getPosts(Request $request){ 

    /* 
    * Gets a list of posts. 
    * 
    * Options: 
    * - unreviewed: gets posts without revisions (default: false) 
    * 
    */ 

    $pagination = 20; 

    //Check constrains 
    if($request->unreviewed == true){ 
     return SocialPostResource::collection(SocialPost::with(['images', 'publication.images']) 
      ->doesntHave('revisions') 
      ->paginate($pagination)); 
    } 

    return SocialPostResource::collection(SocialPost::with(['images', 'publication.images'])->paginate($pagination)); 

} 

次の例では、改訂されている投稿のみを含んでいます。これは最初のクエリで完全に機能します。問題はページネーションの結果にURLの "reviewed = true"パラメータが含まれていないため、ページ2以降ですべての投稿が返されることです。元のリクエストで渡されたパラメータをすべてのURLに含める必要があります。

“data”:{...}, 
“links”:{ 
    ... 
    “next”: “/posts?page=2” 
} 

私が期待した結果は、「/ポスト?未審査=真&ページ= 2」である

答えて

1

私は同じ問題を抱えていました。実際、あなたの質問のおかげで、私はthis similar postが見つかりました。これは私の場合に役立つ解決策を見つけるのを助けました。

これを試してください:

// You must add this Facade in the 'use' section of your file: 
use Illuminate\Support\Facades\Input; 

return SocialPostResource::collection(
    SocialPost::with(['images', 'publication.images']) 
    ->paginate($pagination) 
    ->appends(Input::except('page')) // <- Add this line! 
); 
+0

私は受け入れ回答としてこれをマーキングしています。ただし、以下のように、コレクションセクション内に「追加」を配置する必要があります。 'return SocialPostResource :: collection(SocialPost :: with(['images'、 'publication.images'、 'brands'、 'products ']) Diegoのレスポンスは、それを外に置きます。このレスポンスが外に出て、いくつかの部分が壊れてしまいます。(入力:: except(' page ')))); - >(ブランド名) - >ページ番号($ページング) - > json構造。 –

+0

あなたはそうです。更新された答え。ありがとう。 – Diego

関連する問題