我无法使此查询在 phalcon 中工作,具体取决于我如何更改查询,我得到“无效的参数号:参数未定义”:
SELECT start_date, end_date
FROM it_productivitee_history
WHERE (it_productivitee_history.device_id = 4)
AND (
it_productivitee_history.start_date BETWEEN '2023-11-06 09:10:13' AND '2023-11-06 09:47:34'
OR
it_productivitee_history.end_date BETWEEN '2023-11-06 09:10:13' AND '2023-11-06 09:47:34'
)
我试过了:
public static function searchRecordWithinProductivityTime($deviceID, $startPomodoro, $endPomodoro)
{
$session = Di::getDefault();
$modelsManager = $session->get('modelsManager');
$phql = $modelsManager->createQuery("SELECT start_date, end_date
FROM App\Models\Productivitee
WHERE (App\Models\Productivitee.device_id = :deviceID:)
AND (
App\Models\Productivitee.start_date BETWEEN '" . $startPomodoro . "' AND '" . $endPomodoro .
"')");
$phql->execute(
[
"device_id" => $deviceID,
// "startPomodoro" => $startPomodoro,
// "endPomodoro" => $endPomodoro,
]
);
}
这个有效...但我不知道如何添加 OR 条件..
public static function searchRecordWithinProductivityTime1($deviceID, $startPomodoro, $endPomodoro)
{
$session = Di::getDefault();
$modelsManager = $session->get('modelsManager');
$query = $modelsManager
->createBuilder()
->columns('start_date, end_date')
->from('App\Models\Productivitee')
->where('App\Models\Productivitee.device_id = '. $deviceID)
->betweenWhere('App\Models\Productivitee.start_date', $startPomodoro, $endPomodoro)
->betweenWhere('App\Models\Productivitee.end_date', $startPomodoro, $endPomodoro);
return $query->getQuery()->execute()->getFirst();
}
尝试:
$queryBuilder->columns(['start_date', 'end_date'])
->from('it_productivitee_history')
->where('it_productivitee_history.device_id = :device_id:')
->andWhere(
'it_productivitee_history.start_date BETWEEN :start_date: AND :end_date:' .
' OR it_productivitee_history.end_date BETWEEN :start_date: AND :end_date:'
);
// Bind the parameters
$queryBuilder->bind([
'device_id' => 4,
'start_date' => '2023-11-06 09:10:13',
'end_date' => '2023-11-06 09:47:34',
]);
// Execute the query
$result = $queryBuilder->getQuery()->execute();