Propel ORM найти по нескольким условиям


Мне нужно поместить несколько условий where в мой запрос propel. Как лучше всего это сделать? А пока я делаю это так:

 $employee = EmployeeQuery::create()
            ->where("password = '" . $password . "' AND username = '" . $username . "'")
            ->find();
2 2

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');

Что касается поддерживаемого кода, вам, вероятно, не следует использовать последний пример. Используй первый. Это поможет с удобочитаемостью.

Надеюсь, это поможет!