Красноречивый запрос для получения свойства и его соответствующего количества? - PullRequest
0 голосов
/ 28 октября 2019

У меня есть запрос,

      $countries = Table::select('country')
           ->where('country', '!=', 'null')
           ->where('country', '!=', '')
           ->distinct('country')
           ->pluck('country');

Но это просто возвращает массив всех разных стран. Я ищу количество каждого. Например, я хотел бы, чтобы объект, такой как,

[
    { 'country': 'US' => 'count': '23' },
    { 'country': 'FR' => 'count': '8' },
    .   .   .   . etc...
]

Как я могу достичь этого?

Ответы [ 2 ]

1 голос
/ 28 октября 2019
  • 'country', '!=', 'null' не является правильным способом для сравнения NULL в запросах БД. Вам нужно будет использовать whereNotNull(), который преобразуется в IS NOT NULL в необработанном SQL.
  • Вы также должны будете использовать groupBy() от country и DB::raw() в своем выражении select, чтобы получитьэти результаты.

Фрагмент:

<?php

$countries = Table::select(['country',DB::raw('count(country) as `count`')])
                   ->whereNotNull('country')
                   ->where('country', '!=', "''")
                   ->groupBy('country')
                   ->get()->toArray();

dd($countries);
0 голосов
/ 28 октября 2019

Попробуйте это

   $countries = Table::select('country')
       ->where('country', '!=', 'null')
       ->where('country', '!=', '')
       ->distinct('country')
       ->sum('country') 
       ->pluck('country');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...