我正在尝试在特定日期从表中获取记录。 日期格式:datetime(YYYY-MM-DD HH:II:SS)
我正在尝试将MySQL查询转换为Laravel查询生成器。但是我不知道如何处理DATE_FORMAT()。
这是MySQL查询
SELECT * FROM events
JOIN customers ON events.id_customer = customers.id
WHERE start_date > DATE_FORMAT("2017-06-15", "%Y-%m-%d %H:%i:%s")
AND end_date < DATE_FORMAT("2017-06-16", "%Y-%m-%d %H:%i:%s")
;
在控制器中,我得到了放入DateTime中的日期(字符串)
$date_datetime = new \DateTime(Input::get('date_string'));
然后更改其格式
$query_date = date_format($date_datetime, 'Y-m-d H:i:s');
我尝试了以下代码,但显然不起作用
$pdf_events = DB::table('events')
->join('customers', 'events.id_customer', '=', 'customers.id')
->select(...)
->whereRaw("start_date > DATE_FORMAT($query_date, '%Y-%m-%d %H:%i:%s')")
->whereRaw("end_date < DATE_FORMAT($query_date, '%Y-%m-%d %H:%i:%s')+1")
->get();
答案 0 :(得分:1)
我强烈建议使用Carbon在Laravel中处理DateTime,因为它具有开箱即用的支持。
现在,如何使用它来解决您的问题?
首先,您需要将输入转换为Carbon
对象。
$start_date = Carbon::parse(Input::get('date_string'));
// Assuming you want the end date 1 day later at same time
$end_date = $start_date->addDay();
// You could change the format with format() but in this case we don't need to
然后在您的口才中,您可以使用Carbon
日期时间对象来使用where()
$pdf_events = DB::table('events')
->join('customers', 'events.id_customer', '=', 'customers.id')
->select(...)
->where("start_date", ">", $start_date)
->where("end_date", "<", $end_date)
->get();
答案 1 :(得分:0)
您可以传递Carbon(doc)对象以比较日期。例如:
->where('start_date', '=', Carbon::now())
您可以为自定义日期时间构建自定义Carbon对象,以传递到where子句中。
答案 2 :(得分:0)
您不需要DATE_FORMAT
,请尝试以下操作:
$query_start_date = \Carbon\Carbon::createFromFormat("Y-m-d H:i:s", request()->date_string);
// Add 1 day to the date
$query_end_date = $query_start_date->addDay();
$pdf_events = DB::table('events')
->join('customers', 'events.id_customer', '=', 'customers.id')
->where(
[
["start_date", ">", $query_start_date],
["end_date", "<", $query_end_date]
]
)->get();
答案 3 :(得分:0)
use Datetime;
$end_date1 = $request->input('end_date');
$EndDateTime = DateTime::createFromFormat('d/m/Y H:i:s', $end_date1);
$end_date = $EndDateTime->format('Y-m-d H:i:s');
试试这样对我有用