Laravel: ответ API с параметром пагинации - PullRequest
0 голосов
/ 07 мая 2018

Я хочу передать pagination parameters через POSTMAN и передать sort,order,limits в моем model, чтобы получить запрос с разбивкой на страницы.?Как я могу это сделать?В настоящее время возвращается ошибка.

В настоящее время мой маршрут: http://localhost:8000/api/allpost

Моя PostController функция:

 public function index(Request $request)
{
    try {
        $allPost = Post::allUserPost();
        if($allPost !="" && count($allPost)>0) {
           return  [
                'status_code'     =>     200,
                'message'         =>     "Post retrieved successfully",
                'PostDetails'     =>     $allPost,
            ];  
        } else {
            return response()->json([
                'message'       => "Post data not found",
                'status_code'   => 403,
            ]);
        }
    } catch (\Exception $ex) {
         return response()->json([
            'message'       => "Internal server error",
            'status_code'   => 500,
        ]);
    }
}

И моя POST функция модели:

 public static function allUserPost(Request $request){

    $sort = $this->parameters->sort();
    $order = $this->parameters->order();
    $limit = $this->parameters->limit();

    $userPost       =  Post::with(['product','categories','user.userDetails'])->whereStatus("Active")->orderBy($sort, $order)->paginate($limit)->get();
                    $userPost_array   = $userPost->toArray();
                    foreach ($userPost_array as $key => $value) {
                        # code...
                        $attributes_arr             =   array_column($userPost_array[$key]['categories'], 'attribute_id');
                        $category_ids               =   Attribute::whereIn("id",$attributes_arr)->pluck('category_id');
                        $category_ids               =   array_unique($category_ids->toArray());
                        $category_details_with_att  =   Post::getCategoryWithAttributeData($attributes_arr,$category_ids);
                        unset($userPost_array[$key]["categories"]);
                        $userPost_array[$key]["categories"] = $category_details_with_att->toArray();
                    }
        return  $userPost_array; 
}

В настоящее время возвращается ошибка

Ошибка типа: слишком мало аргументов для функции App \ Post :: allUserPost (), 0 передано в D: \ xampp \ htdocs \ IDM \ app \Api \ V1 \ Controllers \ Front \ PostController.php в строке 30 и ровно 1 ожидаемый

Так, как я могу передать параметры в почтальонах и как решить эту ошибку?

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Сначала измените эту строку на $allPost = Post::allUserPost();

$allPost = Post::allUserPost($request);

и затем измените этот код

$sort = $this->parameters->sort();
$order = $this->parameters->order();
$limit = $this->parameters->limit();

К

$sort = $request->sort;
$order = $request->order;
$limit  = $request->limit;

и затем вы можете передать эти параметры в строке запроса, например

http://localhost:8000/api/allpost?sort=somesort&order=asc&limit=10

Также измените эту строку

$userPost = Post::with(['product','categories','user.userDetails'])->whereStatus("Active")->orderBy($sort, $order)->paginate($limit)->get();

до

$userPost = Post::with(['product','categories','user.userDetails'])->whereStatus("Active")->orderBy($sort, $order)->paginate($limit);
0 голосов
/ 07 мая 2018

Просто измените эту строку в вашем коде

$allPost = Post::allUserPost($request);

А затем в вашей функции вы должны изменить тип запроса. И после этого вам нужно сделать еще одно изменение, используя только метод paginate(), а не метод get().

public static function allUserPost(Request $request){

    $sort = $request->sort;
    $order = $request->order;
    $limit = $request->limit;

    $userPost = Post::with(['product','categories','user.userDetails'])->whereStatus("Active")->orderBy($sort, $order)->paginate($limit);
    $userPost_array   = $userPost->toArray();
    foreach ($userPost_array as $key => $value) {
    $attributes_arr =   array_column($userPost_array[$key]['categories'], 'attribute_id');
    $category_ids = Attribute::whereIn("id",$attributes_arr)->pluck('category_id');
    $category_ids = array_unique($category_ids->toArray());
    $category_details_with_att = Post::getCategoryWithAttributeData($attributes_arr,$category_ids);
                        unset($userPost_array[$key]["categories"]);
                        $userPost_array[$key]["categories"] = $category_details_with_att->toArray();
    }
      return  $userPost_array; 
}

Надеюсь, это поможет вам.

0 голосов
/ 07 мая 2018

Вам не хватает аргумента при вызове функции allUserPost внутри блока try.

должно быть

$allPost = Post::allUserPost($request);

и затем вы можете получить параметры из переменной $ request.

...