Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 雄辩:检查日期是否介于开始日期和停止日期之间_Laravel_Eloquent - Fatal编程技术网

Laravel 雄辩:检查日期是否介于开始日期和停止日期之间

Laravel 雄辩:检查日期是否介于开始日期和停止日期之间,laravel,eloquent,Laravel,Eloquent,我有一个包含4个事件的事件表,所有事件都有不同的开始和结束日期 mysql> select id, event_name, event_startdate, event_closedate from events; +----+--------------+---------------------+---------------------------+ | id | event_name | event_startdate | event_closedate

我有一个包含4个事件的事件表,所有事件都有不同的开始和结束日期

mysql> select id, event_name, event_startdate, event_closedate from events;
+----+--------------+---------------------+---------------------------+
| id | event_name   | event_startdate     | event_closedate           |
+----+--------------+---------------------+---------------------------+
|  1 | Event 1      | 2016-05-01 00:00:00 | 2016-06-30 00:00:00       |
|  2 | Event 2      | 2016-06-01 00:00:00 | 2016-07-30 00:00:00       |
|  3 | Event 3      | 2016-07-01 00:00:00 | 2016-08-30 00:00:00       |
|  4 | Event 4      | 2016-09-01 00:00:00 | 2016-10-30 00:00:00       |
+----+--------------+---------------------+---------------------------+
我想返回当前事件。在MySQL中,以下查询工作:

mysql> select id, event_name, event_startdate, event_closedate from events where now() >= event_startdate and now() <= event_closedate;
+----+--------------+---------------------+---------------------------+
| id | event_name   | event_startdate     | event_closedate           |
+----+--------------+---------------------+---------------------------+
|  1 | Event 1      | 2016-05-01 00:00:00 | 2016-06-30 00:00:00       |
|  2 | Event 2      | 2016-06-01 00:00:00 | 2016-07-30 00:00:00       |
+----+--------------+---------------------+---------------------------+
mysql>select id,event_name,event_startdate,event_closedate from events where()>=event_startdate and now()选择('id','event_name','event_startdate','event_closedate')->其中(DB::raw('now()'),'>=','event_startdate')->其中(DB::raw('now()'),'id}
{{$event->event_name}
{{$event->event_startdate}
{{$event->event_closedate)}
@endforeach
有什么原因不能返回这两个当前事件吗?

您试过了吗

$current_events = DB::table('events')->select( 'id','event_name', 'event_startdate', 'event_closedate' )
    ->where( DB::raw('now()'), '>=', DB::raw('event_startdate') )
    ->where( DB::raw('now()'), '<=', DB::raw('event_closedate') )->get();
$current\u events=DB::table('events')->选择('id','event\u name','event\u startdate','event\u closedate'))
->其中(DB::raw('now()'),'>=',DB::raw('event_startdate'))

->其中(DB::raw('now()'),“要使用的正确查询是:

$current_events = DB::table('events')->select( 'id','event_name', 'event_startdate', 'event_closedate' )
    ->where( DB::raw('now()'), '>=', DB::raw('event_startdate') )
    ->where( DB::raw('now()'), '<=', DB::raw('event_closedate') )->get();
$current\u events=DB::table('events')->选择('id','event\u name','event\u startdate','event\u closedate'))
->其中(DB::raw('now()'),'>=',DB::raw('event_startdate'))
->其中(DB::raw('now()'),'=','event_startdate')

->其中(DB::raw('now()'),“如果在雄辩的模型中使用作用域会更好,在您的案例中,作用域使您的代码更容易理解,并且比原始查询工作得更好。例如,在您的模型中,您应该:

class Event extends Model
{

    ...

    public function scopeCurrent($query)
    {
        return $query->where('event_startdate', '<=', Carbon\Carbon::now())
            ->where('event_closedate', '>=', Carbon\Carbon::now());
    }

    ...

}

如果你在碳方面有问题,请查看。

,因为Laravel使用碳日期。这是一个更好的解决方案。它还使用雄辩的模型,而不是DB类

$current_event = Events::select( 'id','event_name', 'event_startdate', 'event_closedate' )
->where('event_startdate', '<=', Carbon::now())
->where('event_closedate', '>=', Carbon::now())->get();
$current\u event=Events::select('id','event\u name','event\u startdate','event\u closedate')
->其中('event_startdate','=',Carbon::now())->get();

就我所见,这两个查询是完全相同的。你为什么不
dd($current\u events)
看看你得到了什么。也许你眼中的代码是问题所在,而不是查询。我做了dd($current\u events),这是在原始问题中。两者确实是相同的。如果我不清楚,很抱歉。我不是告诉您转储查询,即
->toSql
。我是告诉您转储查询的值,即
->get()
确实尝试过,但没有返回任何结果(没有数组)。同时,我在下面添加了解决方案。谢谢你的建议!谢谢。日期列的DB:raw确实起到了作用。我相信这是一种奇怪的行为,但它是有效的。我在下面添加了答案。谢谢,我一定会看一看。因此Event::current()会自动映射到scopeCurrent()在模型中,是这样吗?没错,作用域是用于筛选模型的预定义查询条件。您还可以定义动态作用域,请看。
$current_events = DB::table('events')->select( 'id','event_name', 'event_startdate', 'event_closedate' )
    ->where( DB::raw('now()'), '>=', DB::raw('event_startdate') )
    ->where( DB::raw('now()'), '<=', DB::raw('event_closedate') )->get();
$current_events = DB::table('events')->select('id','event_name', 'event_startdate', 'event_closedate')
    ->where(DB::raw('now()'), '>=', 'event_startdate')
    ->where(DB::raw('now()'), '<=', 'event_closedate')->get();
class Event extends Model
{

    ...

    public function scopeCurrent($query)
    {
        return $query->where('event_startdate', '<=', Carbon\Carbon::now())
            ->where('event_closedate', '>=', Carbon\Carbon::now());
    }

    ...

}
class EventController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $todayEvents = Event::current()->select('id', 'event_name',  'event_startdate', 'event_closedate')->get();

        ...
    }
}
$current_event = Events::select( 'id','event_name', 'event_startdate', 'event_closedate' )
->where('event_startdate', '<=', Carbon::now())
->where('event_closedate', '>=', Carbon::now())->get();