Хобрук: Ваш путь к мастерству в программировании

Eloquent получает значение, подобное имени столбца?

У меня есть следующая модель в Laravel Eloquent:

<?php

namespace Sac\Models;

use Illuminate\Database\Eloquent\Model as Eloquent;

class PatientsDevices extends Eloquent
{

    ...

    public static function getDevicesByDateTime() 
    {
        $currrentDateTime = (new \DateTime('now', new \DateTimeZone('America/Costa_Rica')))->format('Y-m-d H:i:s');

        return self::where('monitor', '=', 1)
            ->whereBetween($currrentDateTime, ['start_date_time', 'end_date_time'])
            ->get();

    }

    ...
}

С этим я пытаюсь построить следующее предложение SQL:

SELECT * 
FROM `patients_devices` 
WHERE 
(
    `monitor` = 1 AND 
    '2019-03-23 13:11:48' BETWEEN `start_date_time` AND `end_date_time`
)

Но вместо сборки Eloquent:

SELECT * 
FROM `patients_devices` 
WHERE 
(
    `monitor` = 1 AND 
    `2019-03-23 13:11:48` BETWEEN `start_date_time` AND `end_date_time`
)

Небольшая разница заключается в том, что (') и (`) (обратная кавычка / обратная кавычка) в условии where, поскольку первое распознается как строка, а второе - как буквальное имя столбца.

В моей модели у меня есть общедоступный метод, который получает сбор данных с этими условиями: значение монитора равно 1, а между двумя столбцами даты и времени (начало и конец) существует отметка времени.

Моя проблема: я вынужден использовать модели, и я вижу, что использую метод whereBetween, распознаю $currrentDateTime как столбец, когда должен распознавать как значение, так как в SQL я могу использовать столбцы и значения позиций на пункт, где без ограничений.

Это Eloquent ограничение? или я неправильно развиваю логику SQL?. Я могу решить это по-другому, используя модели?


Ответы:


1

Разве вы не хотите получать записи между этими датами?

self::where('monitor', '=', 1)
    ->where('start_date_time', '<=', $currentDateTime)
    ->where('end_date_time', '>=', $currentDateTime)
    ->get();

Если вы хотите использовать whereBetween(), используйте синтаксис ->whereBetween('column', [values]), поэтому я сомневаюсь, что он подходит для вашего случая.

23.03.2019
  • Спасибо @senty, вы правы насчет документации, первый параметр — это имя столбца, поэтому я предположил, что могу передать значение, подобное имени столбца. Вы работаете с кодом. 24.03.2019
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..