Как применять IF, где условие в Laravel Collation - PullRequest
0 голосов
/ 06 октября 2019

Мне нужно собрать секции моего билета из события массива, и мое условие

if 'custom_times' == 'yes' 

, а затем забрать секцию билета только с section_end_time < current date

Пример массива

 {"event_id":1,"ticket_type":"event", "custom_times":"yes",.....,"ticket_section":[{"section_id":1,"section_end_time":"2019-10-10 12:12:12",..... }]}

Запрос

$ticket_sections = collect($event->ticket_sections)->map(function($sections) {
return $sections;
})->where('ticket_type', 'event')
  ->where('hide_online', 'no')
  ->when('custom_times' == 'yes', function($query){
     return $query->where('section_end_time', '<' ,$event->current_date_time);
  });

Но приведенный выше запрос не возвращает фактический результат.

Спасибо

1 Ответ

1 голос
/ 06 октября 2019

Я думаю, вы перепутали коллекцию со строителем запросов.

Для метода когда коллекции требуется логическое значение, и он не может работать с условием для членов коллекции.

Вот как вы можете делать то, что вынужно:

$ticket_sections = collect($event->ticket_sections)
  ->where('ticket_type', 'event')
  ->where('hide_online', 'no')
  ->filter(function($section) use ($event) {
     return $section->custom_times !== 'yes' 
          || $section->section_end_time < $event->current_date_time;
  });
...