Как я могу преобразовать этот запрос в синтаксис Laravel, чтобы использовать нумерацию страниц - PullRequest
0 голосов
/ 29 августа 2018
$db = DB::connection()->getPdo();
$query = "
    SELECT 
    c.id, sys_id, cam_name, description, brand, product, c.status, update_by, start_date, end_date,  
    DATE_FORMAT(CONVERT_TZ(c.created_at, @@session.time_zone, '" . Common::utc_offset() . "'), '%Y-%m-%d %H:%i:%s') as created_at, 
    DATE_FORMAT(CONVERT_TZ(c.updated_at, @@session.time_zone, '" . Common::utc_offset() . "'), '%Y-%m-%d %H:%i:%s') as updated_at, 
    hashid, blm_field, inactive_period, is_testing, signature, camp_type,
    SUM(IF(p.inter = 1 AND p.admin_res = 0, 1, 0)) as Bi_count
    FROM camp c
    LEFT JOIN pros p on c.id = p.camp_id   "
;
if ($campaign_type != null) $query = $query . ' WHERE c.campaign_type = "' . $camp_type . '" ';
    $query = $query . ' GROUP BY c.id ';

    $excute= $db->prepare($query);

Я действительно новичок в Laravel, поэтому мне интересно, есть ли способ, которым я могу преобразовать этот запрос в синтаксис Laravel, чтобы использовать pagination()

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Ну, поскольку вы не используете ни Eloquent, ни Query Builder, вам придется проделать дополнительную работу, чтобы насладиться мощью paginate().

Используя поддержку Raw Query в Laravel, попробуйте следующее:

$result = \DB::select($query);
$collection = collect($result);

Затем разбейте результаты на страницы одним из следующих способов.

МЕТОД 1

$chunk = $collection->forPage($pageNumber, $numberOfItemsPerPage);
dd($chunk->all());

МЕТОД 2

 // Slice the collection to get the items to display in current page
 $currentPageItems = $collection->slice(($pageNumber * $numberOfItemsPerPage) - $numberOfItemsPerPage, $numberOfItemsPerPage)->all();

 // Create the paginator and use
 $chunk = new LengthAwarePaginator($currentPageItems , count($collection), $numberOfItemsPerPage);

 dd($chunk);
0 голосов
/ 29 августа 2018

Предполагая, что вы настроили модель своего лагеря, вы можете сделать что-то вроде этого:

$db = Camp::selectRaw("c.id, sys_id, cam_name, description, brand, product, c.status, update_by, start_date, end_date,  
                DATE_FORMAT(CONVERT_TZ(c.created_at, @@session.time_zone, ?), '%Y-%m-%d %H:%i:%s') as created_at, 
                DATE_FORMAT(CONVERT_TZ(c.updated_at, @@session.time_zone, ?), '%Y-%m-%d %H:%i:%s') as updated_at, 
                hashid, blm_field, inactive_period, is_testing, signature, camp_type,
                SUM(IF(p.inter = 1 AND p.admin_res = 0, 1, 0)) as Bi_count", ['offset1' => Common::utc_offset(), 'offset2' => Common::utc_offset()])
->leftJoin('pros', 'camp.id', '=', 'pros.camp_id');

if($campaign_type != null){
    $db->where('campaign_type', $campaign_type);
}     

$db->GroupBy('camp.id');

$db = $db->paginate(10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...