count (), где утверждение в лезвии Laravel?

Я заинтересован в отображении быстрого подсчета статистики электронной почты в своем приложении, но я не могу найти эффективный способ генерировать подсчеты. Я надеюсь просто использовать красноречивые отношения с каким-то выражением «количество где» внутри лезвия.

Получение общего количества работает так, как должно:

{{count($emails->mandrillemails)}}

но возможно ли что-то подобное?:

{{count($emails->mandrillemails->msg_state == 'bounced')}}
{{count($emails->mandrillemails->msg_state == 'open')}}

Вот мой блок кода с операторами @if и @foreach:

     @if(count($sentEmails) > 0)
      @foreach ($sentEmails as $emails)
       <tr>
        <td>
          @if(count($emails->mandrillemails) > 0)
             <p><span class="badge"><i class="fa fa-paper-plane"></i> {{count($emails->mandrillemails)}}</span> <span class="badge"><i class="fa fa-exclamation-triangle"></i> {{count($emails->mandrillemails->msg_state == 'bounced')}}</span></p>
          @endif
        </td>
      </tr>

Когда я пытаюсь это сделать, я получаю ошибку неопределенного свойства в «msg_state».


person retrograde    schedule 17.06.2015    source источник


Ответы (2)


Вы можете посчитать отношения следующим образом:

$emails->mandrillemails()->whereMsgState('bounced')->count();

Поскольку вы @foreach работаете, вы можете захотеть загрузить эти данные. Это немного сложнее, когда вы подсчитываете отношения — см. http://laravel.io/forum/05-03-2014-eloquent-get-count-relation и http://softonsofa.com/tweaking-eloquent-relations-how-to-get-hasmany-relation-count-efficiently/ для некоторых возможных методов быстрой загрузки значения счетчика вместо всего списка связанных элементов.

person ceejayoz    schedule 17.06.2015

$emails->mandrillemails()->whereMsgState('bounced')->count() должно работать.

person Thomas Ruiz    schedule 17.06.2015