Попытка отсортировать или упорядочить результаты запроса с помощью PHP Laravel - PullRequest
0 голосов
/ 09 октября 2018

Я хочу отсортировать списки восходящих событий на основе start_date.Однако я не могу понять, где поставить строку

sortBY('start_time', 'asc')

или

orderBy('start_date', 'asc')

Вот мой полный код:

@if(!empty($events) && $events->count() > 0)
    @foreach($events as $event)
        @if($event->is_published)
            <div class="event-row">
                <div style="display: table-cell; width: 20%;">
                    @if($event->uploads->count() > 0)
                        <img src="{!! $event->uploads->reverse()->first()->url !!}" alt="" title="" width="150"
                             height="150">
                    @endif
                </div>
                <div style="display: table-cell; width: 80%; vertical-align: top;">
                    <div>
                        <h3 style="margin-top: 3px; margin-bottom: 3px;">{!! $event->name !!}</h3><br/>
                        @if($event->start_time > 0)
                            <small style="font-size: 14px;">
                                {!! $event->start_time !!} - {!! $event->end_time !!}
                            </small>
                        @endif
                        <p style="margin-top: 6px; margin-bottom: 3px;">{!! $event->description !!}</p>
                    </div>
                </div>
            </div>
        @endif
    @endforeach
@else
    Sorry, there are no events.
@endif

Я нашел то, во что я верюбыть запросом:

namespace App\Models\General;

use App\Models\System\Upload;
use Illuminate\Database\Eloquent\Model;

/**
 * Class Session
 * package App.
 */
class Event extends Model
{
    protected $fillable = ['name', 'description', 'start_time', 'end_time', 'is_published'];

    public function uploads()
    {
        return $this->morphMany(Upload::class, 'uploadable');
    }
}

Это запрос?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Будьте осторожны, используя динамические свойства в блейд-файлах.Вы не хотите, чтобы уровень представления случайно выполнял SQL-запросы.

При этом $ builder-> orderBy () применяет сортировку к SQL-запросу.Когда вы делаете $builder->get(), вы получаете дочерний класс Eloquent из Support \ Collections .А в Support \ Collections есть метод sortBy(), который заставляет Php выполнять сортировку.

Когда это возможно, заставить работу SQL делать.

0 голосов
/ 09 октября 2018

Попробуйте

$events->orderBy('start_date', 'asc')->get()

Таким образом, ваш foreach будет выглядеть следующим образом:

@foreach($events->orderBy('start_date', 'asc')->get() as $event)

Примечание , если вы заказываете в своем контроллере, тогда используйте:

@foreach($events as $event)

И ваш последний фрагмент (в зависимости от того, где вы заказали):

@if(!empty($events) && $events->count() > 0)
@foreach($events as $event)
    @if($event->is_published)
        <div class="event-row">
            <div style="display: table-cell; width: 20%;">
                @if($event->uploads->count() > 0)
                    <img src="{!! $event->uploads->reverse()->first()->url !!}" alt="" title="" width="150"
                         height="150">
                @endif
            </div>
            <div style="display: table-cell; width: 80%; vertical-align: top;">
                <div>
                    <h3 style="margin-top: 3px; margin-bottom: 3px;">{!! $event->name !!}</h3><br/>
                    @if($event->start_time > 0)
                      <small style="font-size: 14px;">
                          {!! $event->start_time !!} - {!! $event->end_time !!}
                      </small>
                    @endif
                    <p style="margin-top: 6px; margin-bottom: 3px;">{!! $event->description !!}</p>
                </div>
            </div>
        </div>
    @endif
@endforeach
@else
    Sorry, there are no events.
@endif

Предполагается, что ваш контроллер выглядит так:

use App\Models\General\Event;
....
class EventsController extends \Illuminate\Routing\Controller
{
     public function index()
     {
         return view('events', [
             'events' => Event::orderBy('start_date', 'asc')->get()
         ]);
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...