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