龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

Yii查询生成器(Query Builder)用法实例教程(3)

时间:2014-09-06 16:10来源:网络整理 作者:网络 点击:
分享到:
③.in: operand 1 应是一个列或 DB 表达式,而 operand 2 是代表值的范围的数组,列或 DB 表达式应在这个数组的范围内。例如,array('in', 'id', array(1,2,3)) 将生成

③.in: operand 1 应是一个列或 DB 表达式,而 operand 2 是代表值的范围的数组,列或 DB 表达式应在这个数组的范围内。例如,array('in', 'id', array(1,2,3)) 将生成 id IN (1,2,3)。

④.not in: 类似 in 操作,除了用 NOT IN 代替 IN  去生成SQL。

⑤.like: operand 1 应是一个列或 DB 表达式,而 operand 2 是代表值的范围的数组,列或 DB 表达式应在这个数组的范围内。例如,array('like', 'name', '%tester%') 会生成 name LIKE '%tester%'。当规定值的范围为一个数组时,多个 LIKE 生成SQL时会用 AND 连接。例如,array('like', 'name', array('%test%', '%sample%')) 会生成 name LIKE '%test%' AND name LIKE '%sample%'。

⑥.not like: 类似 like 的操作,除了用 NOT LIKE 代替 LIKE  去生成SQL。

⑦.or like: 类似 like 的操作,除了多个 like 生成 SQL 时用OR连接。

⑧.or not like:  类似 not like 的操作,除了多个 like 生成 SQL 时用OR连接。

下面是一些例子,使用的地方:

// WHERE id=1 or id=2
where('id=1 or id=2')
// WHERE id=:id1 or id=:id2
where('id=:id1 or id=:id2', array(':id1'=>1, ':id2'=>2))
// WHERE id=1 OR id=2
where(array('or', 'id=1', 'id=2'))
// WHERE id=1 AND (type=2 OR type=3)
where(array('and', 'id=1', array('or', 'type=2', 'type=3')))
// WHERE `id` IN (1, 2)
where(array('in', 'id', array(1, 2))
// WHERE `id` NOT IN (1, 2)
where(array('not in', 'id', array(1,2)))
// WHERE `name` LIKE '%Qiang%'
where(array('like', 'name', '%Qiang%'))
// WHERE `name` LIKE '%Qiang' AND `name` LIKE '%Xue'
where(array('like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` LIKE '%Qiang' OR `name` LIKE '%Xue'
where(array('or like', 'name', array('%Qiang', '%Xue')))
// WHERE `name` NOT LIKE '%Qiang%'
where(array('not like', 'name', '%Qiang%'))
// WHERE `name` NOT LIKE '%Qiang%' OR `name` NOT LIKE '%Xue%'
where(array('or not like', 'name', array('%Qiang%', '%Xue%')))

请注意,当操作者含有like时,我们必须明确指定的通配符(如%和_)的模式。如果参数是从用户的输入,我们也应该使用下面的代码转义特殊字符,以防止他们被当作通配符:

$keyword=$_GET['q'];
// escape % and _ characters
$keyword=strtr($keyword, array('%'=>'\%', '_'=>'\_'));
$command->where(array('like', 'title', '%'.$keyword.'%'));

andWhere()

function andWhere($conditions, $params=array())

用and 的方式添加到WHERE的条件中。此方法的行为几乎是 where() 相同,除了它只是添加条件不能取代它。在 where() 文档中有该方法参数的详细信息。

orWhere()

function orWhere($conditions, $params=array())

用 or 的方式添加到WHERE的条件中。此方法的行为几乎是 where() 相同,除了它只是添加条件不能取代它。在 where() 文档中有该方法参数的详细信息。

order()

function order($columns)

order() 方法指定查询的ORDER BY部分。$columns 参数指定列进行排序,这可以是一个包含用逗号分隔列和order的方向(ASC 或 DESC)的字符串,或者一个列和order的方向的数组。列名称可以包含表前缀。该方法将自动引用列名,除非一列包含一些括号(即给出一个 DB 表达式)。

下面是一些例子:

// ORDER BY `name`, `id` DESC
order('name, id desc')
// ORDER BY `tbl_profile`.`name`, `id` DESC
order(array('tbl_profile.name', 'id desc'))

limit() and offset()

function limit($limit, $offset=null)
function offset($offset)

limit()和offset()方法指定查询的 LIMIT 和 OFFSET 部分。请注意,某些DBMS不支持 LIMIT 和 OFFSET 语法。在这种情况下,查询生成器将改写整个SQL语句来模拟 LIMIT 和 OFFSET 的功能。

下面是一些例子:

// LIMIT 10  取前10条
limit(10)
// LIMIT 10 OFFSET 20  取到第21~30条
limit(10, 20)
// OFFSET 20  去掉前20条后剩下的数据
offset(20)

join() and its variants

function join($table, $conditions, $params=array())
function leftJoin($table, $conditions, $params=array())
function rightJoin($table, $conditions, $params=array())
function crossJoin($table)
function naturalJoin($table)

精彩图集

赞助商链接