#1 jake
在find,findAll,findSQL等多个查找函数以及update,delete等函数中出现的参数$conditions,除了可以是数组格式外,还可以是字符串的形式,而字符串形式的$conditions就如同SQL语句中的WHERE后面的条件字符串一样的使用。
也就是说:findAll/find等函数的第一个参数$conditions,不一定要是数组(代表AND条件),而且还可以是字符串(代表SQL语句中WHERE条件)。可以进行 OR(或)、LIKE(模糊查找)、复合OR和AND等的较复杂的查找。
如我们希望能够查询到guestbook表中,留言者名称为“jake或lin”的留言:
通常我们可以使用以下SQL语句来查找:
SELECT * FROM spgb_gb WHERE name = 'jake' OR name = 'lin'
那么,如何使用findAll来查询呢?
// 首先需要准备查找条件
$conditions = " name = 'jake' OR name = 'lin' ";
$gb = spClass('gb'); // 初始化留言本模型类
$result = $gb->findAll($conditions); // 查找
dump($result); // 查看结果,
请注意$conditions = " name = 'jake' OR name = 'lin' ";的这行代码,即是说,我们将上述SQL语句中在WHERE后面的条件,写到了findAll的第一个参数内,这样最终就可以达到SQL语句的查询结果了。
下面我们再举一些例子:
1. 复合 OR 和 AND的查询
查询名称为jake或lin的留言,而且留言的时间是在5月3日之后。
SELECT * FROM spgb_gb WHERE ( name = 'jake' OR name = 'lin' ) AND post_time > '2010-05-03 00:50:55'
而findAll就是:
$conditions = " ( name = 'jake' OR name = 'lin' ) AND post_time > '2010-05-03 00:50:55' ";
$results = $gb->findAll($conditions);
2. like模糊查找
模糊查找在留言内容(contents)中有“SpeedPHP”一词的留言。
SELECT * FROM spgb_gb WHERE contents like '%SpeedPHP%'
而findAll是:
$conditions = " contents like '%SpeedPHP%' '";
$results = $gb->findAll($conditions);
上面可以看到,SpeedPHP的findAll查询的能力是非常强大的,不仅可以查询AND条件的,还可以查询OR,like等条件的数据。而且,以上的一切,都是不需要写SQL语句即可查询,大大方便了开发者日常的查找需要。
2012-08-04 16:16:12