Phalcon 5 查询 BetweenWhere OR BetweenWhere

问题描述 投票:0回答:1

我无法使此查询在 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();

}
php sql mysql phalcon phalcon-orm
1个回答
0
投票

尝试:

$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();
© www.soinside.com 2019 - 2024. All rights reserved.