Eloquent получить значение, как имя столбца? - PullRequest
0 голосов
/ 24 марта 2019

У меня есть следующая модель в 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 build:

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 Ответ

2 голосов
/ 24 марта 2019

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

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

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

...