【问题标题】:Laravel carbon retrieve record even when it shouldn'tLaravel 碳检索记录,即使它不应该
【发布时间】:2017-07-05 21:54:44
【问题描述】:

我正在按开始和结束日期或工作日进行搜索,哪种工作正常,但是如果工作日等于“WE”并且今天的工作日等于“WE”,即使 $today 日期为

public function show($id)
{   
    $weekMap = [
        0 => 'SU',
        1 => 'MO',
        2 => 'TU',
        3 => 'WE',
        4 => 'TH',
        5 => 'FR',
        6 => 'SA',
    ];
    $todayWeek = Carbon::now()->dayOfWeek;
    $today= Carbon::now();
    $weekday = $weekMap[$todayWeek];
    $event = Event::with('businesses')
       ->where('startdate', '<', $today->format('Y-m-d'))
       ->where('endate', '>', $today->format('Y-m-d'))
       ->orWhere('weekday', '=', $weekday)
       ->get();
    dd($event);
    return view('events.showEvent', compact('event'));
}

如果我改变 orWhere to where,结果都很好,但是用户并不总是输入工作日,所以它可能是空的。我希望它像这样工作:

输出 startdate 今天的所有内容,如果 weekday 不为空,则输出 startdate today 和 weekday = $weekday 的所有内容。我希望这是有道理的。

//编辑

样本数据:

data

所以我真正想要的是按频率搜索,所以它看起来像这样:

如果频率 = 每天 将开始和结束与今天的日期进行比较。 如果频率 = 每周 将 start 和 end 与今天的日期和工作日进行比较。

返回频率 = 每天+每周的所有结果

【问题讨论】:

    标签: laravel laravel-5 eloquent


    【解决方案1】:

    你可以像这样在查询中使用 if 条件:

    $query = Event::with('businesses')
       ->where('startdate', '<', $today->format('Y-m-d'))
       ->where('endate', '>', $today->format('Y-m-d'));
    
       if ($weekday != '') {
           $query->where('weekday', $weekday);
       }
    
       $event = $query->get();
    

    还有

    条件if ($weekday != '')检查$weekday isset 是否可以使用

    改为if ( ! is_null($weekday ))

    【讨论】:

    • 问题在于这段代码只带回 1 个结果,其中 weekday = 'WE' 该部分是正确的,但它不会带回匹配开始和结束日期但不包含的结果$工作日
    • $weekday 总是有一个值,因为它设置为碳,它必须匹配的是 where('weekday') 所以匹配数据库中的 'weekday' 如果它不是空的,运行 where声明
    • 所以它必须匹配 if (!empty($event->weekday) 之类的东西,但它一直给我一个错误,即集合为空
    • 你能编辑你的问题并放置示例表数据并告诉我你想要得到什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2016-05-19
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多