MySQL запрос с DATE_FORMAT () в Laravel Querybuilder (или Eloquent) - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь получить записи из таблицы в определенный день. Формат даты: дата / время (ГГГГ-ММ-ДД ЧЧ: II: СС)

Я пытаюсь перевести запрос 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();

Ответы [ 3 ]

1 голос
/ 15 мая 2019

Я настоятельно рекомендую использовать Carbon для обработки DateTime в Laravel, поскольку он имеет встроенную поддержку.

Теперь, как использовать его для решения вашей проблемы?

Во-первых, вам необходимо преобразовать ваш ввод в 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

Затем в вашем Eloquent вы можете использовать объект Carbon Datetime для запроса, используя 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 голос
/ 15 мая 2019

Вы можете передавать объекты Carbon ( doc ) для сравнения дат. Например:

->where('start_date', '=', Carbon::now())

Вы можете создать собственный объект Carbon за пользовательскую дату и время, чтобы передать его в предложение where.

0 голосов
/ 15 мая 2019

Вам не нужно 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();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...