Я пытаюсь использовать объект Phalcon\Mvc\Model\Query\Builder вместе с методом Phalcon\Mvc\Model::find() для настройки поведения загрузки данных.
Все строки модели в таблице имеют поле «record_status», которое используется для отметки активных/неактивных записей.
Я намерен расширить методы Model::find() и Model::findFirst(), чтобы всегда добавлять ограничение «record_status=1» ко всем моим запросам модели. Но пока я просто пытаюсь передать объект Query\Builder в метод ::find() извне:
class User extends Phalcon\Mvc\Model
{
}
$user = new User();
/**
* @var Phalcon\Mvc\Model\Query\Builder
*/
$query = $user->getModelsManager()->createBuilder();
$query->where('email = :email:', [
'email' => '[email protected]'
])->andWhere('record_status = :status:', [
'status' => 1
])->from('users');
$found = $user->find($query);
foreach ($found as $foundUser) {
...
}
Проблема в том, что ->find($query) возвращает ВСЕ строки из базы данных, игнорируя предложения WHERE со значением $query.
При проверке свойств $query и $user я вижу следующие соответствующие защищенные свойства:
$query::_conditions = '(email = :email:) AND (record_status = :status:)';
$query::_bindParams = array(
'email' => '[email protected]',
'status' => 1
);
$user::_count = 4; // This is wrong, this corresponds to TOTAL number of rows
$user::_result->_bindParams = NULL; // Bound parameters have disappeared
$user::_result->_sqlStatement = 'SELECT `users`.`id`, `users`.`email`, `users`.`record_status` FROM `users`'; // As you can see, there is no WHERE clause
У меня Phalcon 1.3.0, PHP 5.5.1.
Я ожидаю, что методы find() и findFirst() примут объект Query\Builder() и получат правильные записи. Это ошибка или я неправильно к ней подхожу?
Спасибо, Темури.