Как получить количество строк, используя свободный мастер запросов laravel - PullRequest
1 голос
/ 13 июня 2019

Как получить количество строк, используя свободный построитель запросов Laravel

Я приложил запрос, который использовал для фильтрации других данных, а также мне нужно получить количество строк.

ВотТаблица базы данных: -

enter image description here

  $results = DB::table('newsfeed_posts')
    ->select('newsfeed_posts.*', 'users.first_name as posted_user_first_name', 'users.last_name as posted_user_last_name', 'users.profile_image as posted_user_profile_image','proid.profile_image as posted_receiver_profile_image', 'timeline.first_name as post_receiver_first_name', 'timeline.last_name as post_receiver_last_name', 'timeline.office_branch_id as post_receiver_office_id')
    ->leftJoin('users', 'users.id', 'newsfeed_posts.post_sender_id')
    ->leftJoin('users as timeline', 'timeline.id', 'newsfeed_posts.post_receiver_id') 
    ->leftJoin('users as proid', 'proid.id', 'newsfeed_posts.post_receiver_id') 
    ->where('newsfeed_posts.deleted_status', '0')
    // ->where('newsfeed_posts.post_sender_id', Auth::user()->id)
    ->where('newsfeed_posts.post_receiver_id', Auth::user()->id)
    ->groupBy('newsfeed_posts.id')
    ->orderBy('newsfeed_posts.id', 'DESC')
    ->get();

    return $results;

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Используя чистый построитель запросов Laravel, вам может потребоваться выполнить два отдельных запроса:

$count = DB::table('newsfeed_posts')
    ->select('newsfeed_posts.*', 'users.first_name as posted_user_first_name', 'users.last_name as posted_user_last_name', 'users.profile_image as posted_user_profile_image','proid.profile_image as posted_receiver_profile_image', 'timeline.first_name as post_receiver_first_name', 'timeline.last_name as post_receiver_last_name', 'timeline.office_branch_id as post_receiver_office_id')
    ->leftJoin('users', 'users.id', 'newsfeed_posts.post_sender_id')
    ->leftJoin('users as timeline', 'timeline.id', 'newsfeed_posts.post_receiver_id') 
    ->leftJoin('users as proid', 'proid.id', 'newsfeed_posts.post_receiver_id') 
    ->where('newsfeed_posts.deleted_status', '0')
    ->where('newsfeed_posts.post_receiver_id', Auth::user()->id)
    ->groupBy('newsfeed_posts.id')
    ->count();

Затем используйте текущий запрос, чтобы сгенерировать нужный набор результатов.

Если вы используете MySQL 8+ под капотом, то есть альтернатива. Мы можем попробовать использовать COUNT() в качестве аналитической функции, используя только один запрос:

$results = DB::table('newsfeed_posts')
    ->selectRaw('COUNT(*) OVER () AS cnt, newsfeed_posts.*', 'users.first_name as posted_user_first_name', 'users.last_name as posted_user_last_name', 'users.profile_image as posted_user_profile_image','proid.profile_image as posted_receiver_profile_image', 'timeline.first_name as post_receiver_first_name', 'timeline.last_name as post_receiver_last_name', 'timeline.office_branch_id as post_receiver_office_id')
    ->leftJoin('users', 'users.id', 'newsfeed_posts.post_sender_id')
    ->leftJoin('users as timeline', 'timeline.id', 'newsfeed_posts.post_receiver_id') 
    ->leftJoin('users as proid', 'proid.id', 'newsfeed_posts.post_receiver_id') 
    ->where('newsfeed_posts.deleted_status', '0')
    ->where('newsfeed_posts.post_receiver_id', Auth::user()->id)
    ->groupBy('newsfeed_posts.id')
    ->orderBy('newsfeed_posts.id', 'DESC')
    ->get();

Подсчет всего набора результатов (после агрегирования GROUP BY) будет доступен с использованием псевдонима cnt.

0 голосов
/ 13 июня 2019

Если вы хотите получить все отфильтрованные записи из базы данных с количеством записей выбранных элементов.Затем вы можете сначала использовать команду get all results, используя функцию get(), и для этого результата вы можете использовать ->count(), чтобы получить количество всех выбранных элементов.

$result = DB::table('newsfeed_posts')
    ->select('newsfeed_posts.*', 'users.first_name as posted_user_first_name', 'users.last_name as posted_user_last_name', 'users.profile_image as posted_user_profile_image','proid.profile_image as posted_receiver_profile_image', 'timeline.first_name as post_receiver_first_name', 'timeline.last_name as post_receiver_last_name', 'timeline.office_branch_id as post_receiver_office_id')
    ->leftJoin('users', 'users.id', 'newsfeed_posts.post_sender_id')
    ->leftJoin('users as timeline', 'timeline.id', 'newsfeed_posts.post_receiver_id') 
    ->leftJoin('users as proid', 'proid.id', 'newsfeed_posts.post_receiver_id') 
    ->where('newsfeed_posts.deleted_status', '0')
    // ->where('newsfeed_posts.post_sender_id', Auth::user()->id)
    ->where('newsfeed_posts.post_receiver_id', Auth::user()->id)
    ->groupBy('newsfeed_posts.id')
    ->orderBy('newsfeed_posts.id', 'DESC')
    ->get();

return [
    'total' => $result->count(),
    'result' => $result
];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...