web-dev-qa-db-fra.com

La méthode paginer n'existe pas. en laravel après conversion en objet

Je reçois cette erreur pour la pagination

La méthode paginer n'existe pas.

$allTodaysJob = \DB::select(\DB::raw('select * from `new_job` WHERE DATE(created_at) = DATE(CURRENT_TIMESTAMP())'));

$collection = collect($allTodaysJob)->paginate(10);

return view('common_status',['data'=>$collection]); 

S'il vous plaît aidez-moi à résoudre ce problème.

2
user5405873

Paginer fonctionne avec le modèle Eloquent. Faites un modèle et si vous utilisez un modèle, vous pouvez faire quelque chose comme ceci avec éloquent:

$allTodaysJob = ModelName::where('created_at', DATE(CURRENT_TIMESTAMP())->get()->paginate(10); 

Ou si vous voulez le commander au plus tard:

$allTodaysJob = ModelName::where('created_at', DATE(CURRENT_TIMESTAMP())->latest()->paginate(10); 

Mais si vous souhaitez utiliser une requête brute, vous pouvez créer une méthode de pagination personnalisée dans la classe actuelle. Tout d’abord, vous créez un tableau, puis vous le transmettez à la méthode pagination, comme le code ci-dessous:

c'est la méthode de pagination:

 protected function paginate($items,$perPage,$request)
    {

        $page = Input::get('page', 1); // Get the current page or default to 1

        $offset = ($page * $perPage) - $perPage;

        return new LengthAwarePaginator(
            array_slice($items, $offset, $perPage, true),
            count($items), $perPage, $page,
            ['path' => $request->url(), 'query' => $request->query()]
        );
    }

Ensuite, vous pouvez appeler la méthode paginate après avoir sélectionné des données dans la base de données. Je vous recommande de le faire avec une méthode brute au lieu de sélectionner:

$allTodaysJob = \DB::raw('select * from `new_job` WHERE DATE(created_at) = DATE(CURRENT_TIMESTAMP())')->get();

$allTodaysJob = $this->paginate($allTodaysJob,10,$request);

Notez que vous devez transmettre la requête Request $ à la méthode d’indexation, puis l’utiliser dans la pagination. Parce que cette requête est dirigée vers une page spécifique par le biais d'un lien de pagination, la pagination de laravel sait quels éléments sélectionner dans votre vue.

J'espère que ça aiderait!

2
Salar Bahador

Paginate fonctionne avec eloquent model ou query builder, il ne fonctionne pas avec raw sql query. Créez un modèle de table new_job en tant que NewJob.

$collection = NewJob::where('created_at',date("Y-m-d H:i:s"))->paginate(10);
1
Sohel0415

À mon avis, cela devrait se passer ainsi:

 $collection = collect($allTodaysJob)->get()->toArray()->paginate(10);
1
Adam Kozlowski

essayez ces

$allTodaysJob = \DB::select('select * from `new_job` WHERE DATE(created_at) = DATE(CURRENT_TIMESTAMP())')->paginate(10);

return view('common_status',['data'=>$allTodaysJob]); 

Ou (j'utilise actuellement)

$allTodaysJob = DB::table('new_job')
            ->where('created_at', DATE(CURRENT_TIMESTAMP()))
            ->paginate(10);

return view('common_status',['data'=>$allTodaysJob]); 
0
Abdulla Nilam