Propel ORM найти по нескольким условиям
Мне нужно поместить несколько условий where
в мой запрос propel. Как лучше всего это сделать? А пока я делаю это так:
$employee = EmployeeQuery::create()
->where("password = '" . $password . "' AND username = '" . $username . "'")
->find();
2 ответа:
Используйте функции
filterByXXX
:$employee = EmployeeQuery::create() ->filterByUsername($username) ->filterByPassword($password) ->find();
Используйте методы фильтрации, основанные на именах столбцов в схеме
Документация поможет полностью понять это.
Схема:
<table name="users" phpName="User" > <column name="user_id" phpName="Id" /> <column name="user_name" phpName="Name" /> <column name="user_password" phpName="Password" /> <column name="user_address_city" phpName="City" /> </table>
Запрос:
$User = UserQuery::create() ->filterByName($user['name']) ->filterByPassword($user['pass']) ->filterById($user['id']) ->find();
Имейте в виду, что вы также можете использовать
->find()
аналогично, но это Терминатор и вернет коллекцию объектов$User = UserQuery::create()->findByName($user['name']);
Полезнее для
$User = UserQuery::create()->findById(132); $User = UserQuery::create()->findPk(132);
FindOne() также будет вести себя подобным образом, но не будет возвращать коллекцию, даже если есть несколько результатов с критерий.
$User = UserQuery::create()->findOneByName($user['name']);
Или комбинация
$u = ClientQuery::create() ->filterByName('John') ->findByCity('Orlando');
Что касается поддерживаемого кода, вам, вероятно, не следует использовать последний пример. Используй первый. Это поможет с удобочитаемостью.
Надеюсь, это поможет!