2017-01-03 2 views
1

У меня есть таблица с моей точки зрения лезвия, и это показано, как это (я взял только тр и тд часть из):Min и максимальное значение в Laravel лезвие

@foreach ($event->offers as $offer) 
    <tr> 
     <td class="text-center"><a href="/offers/{{ $offer->id }}">{{ $offer->user->company }}</a></td> 
     <td class="text-center">{{ $offer->created_at }}</td> 
     <td class="text-center"><span class="btn btn-default">{{ $offer->netto }} €</span></td> 
    </tr> 
@endforeach 

То, что я хочу, чтобы изменить самозагрузки btn соответственно для минимального и максимального значений, но только для этих двух значений!

Я нашел родную PHP функции мин() и MAX()

http://php.net/manual/en/function.min.php

Но я не знаю, как осуществить это с лезвием и петлей Еогеаспа.

+0

[Красноречивые Коллекции также мин() и MAX() метода] (https://laravel.com/docs/5.3/collections#method-max) –

+0

OK, вы знаете, как реализовать это в лезвии вместе с петлей foreach? – lewis4u

+0

Да, но что вы хотите проверить min/max? –

ответ

1

Первый способ заключается вsortBy() сбора и использования the loop variable. Он покажет минимальное и максимальное значение только один раз:

@foreach ($event->offers->sortBy('netto') as $offer) 
    .... 
    <td class="text-center"><span class="btn btn-default {{ $loop->first ? 'minClass' : '' }}{{ $loop->last ? 'maxClass' : '' }}">{{ $offer->netto }} €</span> 
@endforeach 

Второй путь является немного некрасиво, но он будет показывать минимальное и максимальное только один раз даже если Есть несколько же минимальные или максимальные значения. Использование min() и max() помощников:

<?php $min = $event->offers->min('netto'); 
     $max = $event->offers->max('netto'); 
     $minShown = false; 
     $maxShown = false; ?> 

@foreach ($event->offers as $offer) 
    .... 

    {{-- Show min class only once --}} 
    <?php $minClass = ''; $maxCalss = ''; ?> 
    @if (!$minShown && $offer->netto == $min) 
     <?php $minShown = true; $class = 'minClass' ?> 
    @endif 

    {{-- Show max class only once --}} 
    @if (!$maxShown && $offer->netto == $max) 
     <?php $maxShown = true; $class = 'maxClass' ?> 
    @endif 

    <span class="btn btn-default {{ $class }}">{{ $offer->netto }} €</span> 
@endforeach 
+0

Только это мне непонятно .... 'sortBy ('netto')' что здесь нетто? требуется ли свойство $ offer-> netto или что? – lewis4u

+0

Да, это свойство требует некоторой собственности и сортировки. Это описание из документов: метод sortBy сортирует коллекцию по данному ключу. Сортированная коллекция хранит исходные ключи массива, поэтому в этом примере мы будем использовать метод значений для сброса ключей к последовательно пронумерованным индексам –

+1

OK cool ... это лучшее решение для меня – lewis4u

0

Вариант 1

Это добавляет дополнительный класс, если условие выполняется (с помощью тройного если):

{{ $offer->netto == $event->offers->max('netto') ? 'ADDITIONAL CLASS' : '' }} 

Вставьте его так:

<td class="text-center"><span class="btn btn-default {{ $offer->netto == $event->offers->max('netto') ? 'ADDITIONAL CLASS' : '' }}">{{ $offer->netto }} €</span></td> 

Это не самый оптимизированный кусок кода, когда он будет выполнять ->max() на каждой итерации. Но вы можете сделать оптимизацию здесь (сохранить max в переменной и т. Д.). То же самое можно сделать для ->min()

Вариант 2:

Скорее всего, вам нужно что-то вроде этого, хотя. Это предполагает, что вы будете изменить класс «БТН-умолчанию» на основе макс/мин значения Нетто:

<td class="text-center"> 
    <span 
     @if($offer->netto == $event->offers->max('netto')) 
     class="btn btn-max"> 
     @elseif($offer->netto == $event->offers->min('netto')) 
     class="btn btn-min"> 
     @else 
     class="btn btn-default"> 
     @endif 
     {{ $offer->netto }} € 
    </span> 
</td> 
+0

ok вы дали мне идею .... что, если я сделаю 2 функции (для max и min) в моей модели предложения, это будет лучше, я имею в виду более оптимизированный и быстрый? – lewis4u

+0

Я не думаю, что это было бы лучшим решением. Экземпляр модели не будет знать о коллекции, которую она разместила. В принципе, у него нет возможности узнать, является ли оно min/max. Одним из способов было бы сортировать предложения по их «netto» при запросе (возможно, вы этого не захотите). Другой способ - установить '$ maxNetto' и' $ minNetto' в контроллере и передать его в представление. Затем проверьте представление '$ offer-> netto == $ maxNetto' в представлении. – devk

+0

Экземпляр модели будет знать, потому что модели связаны, и я могу вызвать $ event-> предложения, и он вернет коллекцию ... так что попробуем сделать что-то из этого ... Я имею в виду, давайте попробуем сделать наилучшее возможное решение этой проблемы, чтобы другие могли также узнать. – lewis4u

Смежные вопросы