通过多个条件推动 ORM 查找

Propel ORM find by multiple conditions

我需要在推进查询中加入多个 where 条件。最好的方法是什么。现在我是这样做的:

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

使用filterByXXX函数:

$employee = EmployeeQuery::create()
           ->filterByUsername($username)
           ->filterByPassword($password)
           ->find();

使用基于架构中列名的过滤方法

The documentation有助于深入理解。

架构:

<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(),但它是一个终止符,将 return 和对象集合

$User = UserQuery::create()->findByName($user['name']); 

更有用

$User = UserQuery::create()->findById(132); 
$User = UserQuery::create()->findPk(132);

FindOne() 也会像这样运行,但不会 return 一个集合,即使有多个符合条件的结果。

$User = UserQuery::create()->findOneByName($user['name']); 

或组合

$u = ClientQuery::create()
                ->filterByName('John')
                ->findByCity('Orlando');

就可维护代码而言,您可能不应该使用最后一个示例。使用第一个。这将有助于提高可读性。

希望对您有所帮助!