通过多种条件推进ORM查找

时间:2015-03-30 16:20:51

标签: php mysql database orm propel

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

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

2 个答案:

答案 0 :(得分:3)

根据架构中的列名称使用过滤器方法

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(),但它是终结者并将返回和对象集合

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

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

希望它有所帮助!

答案 1 :(得分:2)

使用filterByXXX功能:

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