我在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`
)
但是雄辩地构建:
SELECT *
FROM `patients_devices`
WHERE
(
`monitor` = 1 AND
`2019-03-23 13:11:48` BETWEEN `start_date_time` AND `end_date_time`
)
在(where)条件中的(')和(`)(反引号/反引号)差别不大,因为第一个识别为字符串,第二个识别为文字列名称。
在我的模型中,我有一个公共方法,可以使用以下条件检索数据收集:监视值为1且 两个datetime列(开始和结束)之间存在一个时间戳。
我的问题:我被迫使用模型,并且看到我使用了whereBetween
方法,在将$currrentDateTime
识别为列的情况下应将其识别为值,因为在SQL中,我可以在没有限制的子句上使用列和值的位置。
这是Eloquent
的限制吗?还是我正在以错误的方式开发逻辑SQL?我可以使用模型以其他方式解决它吗?
答案 0 :(得分:2)
您不想在这些日期之间获取条目吗?
self::where('monitor', '=', 1)
->where('start_date_time', '<=', $currentDateTime)
->where('end_date_time', '>=', $currentDateTime)
->get();
如果您想使用whereBetween()
,则语法为->whereBetween('column', [values])
,因此我怀疑它是否适合您的情况。