如何在Laravel整理中的条件条件下应用IF

时间:2019-10-06 07:00:38

标签: laravel collect laravel-6

我需要从数组事件中收集我的票证部分,我的条件是

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 个答案:

答案 0 :(得分:1)

我认为您已经将集合与查询构建器混淆了。

集合的when方法需要一个布尔值才能工作,并且不能对集合成员施加条件。

这是您可以做所需的事情:

$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;
  });