一旦你已经有一个模型对象,你便可以使用它从它关联的表中获取数据。
fetch()
-
根据主键值获取一个记录或集合对象。
fetchAll()
-
获取一个由记录对象构成的集合对象(按键排序)。
fetchAllAsArray()
-
和
fetchAll()
一样,除了返回结果外,本方法的返回结果是一个有序二维数组而不是集合对象。 fetchAssoc()
-
和
fetchAll()
类似,本方法使用关联数组的键获取集合对象(由记录对象构成)。联合数组的键值是结果中对应的第一个字段的值。 fetchAssocAsArray()
-
和
fetchAssoc()
一样,除了返回结果外,本方法返回的是二维的关联数组而不是集合对象。 fetchCol()
-
获取一个有序数组,该数组由数据的第一列构成。
fetchOne()
-
获取一个记录对象。
fetchOneAsArray()
-
和
fetchOne()
类似,不同的是本方法返回的结果是一个关联数组,键是字段名,值是字段值。 fetchPairs()
-
获取一个键-值对的关联数组,其中键是第一个字段,值是第二个字段。
fetchValue()
-
返回一个值;例如:第一行的第一列。
对于fetch()
方法,其参数是一个主键值(或是由主键值构成的数组)。
<?php // a single blog record, blog.id = 1 $item = $model->blogs->fetch(1); // a collection of blog records $list = $model->blogs->fetch(array(1, 2, 5));
其他的获取方法有一系列参数,这些参数最终构成了SELECT语句。这些参数都是以关联数组的形式出现的。
<?php $fetch = array( // SELECT ... FROM blogs AS zim 'alias' => 'zim', // select these columns 'cols' => array('id', 'foo', 'bar', 'SUM(baz) AS total'), // WHERE conditions 'where' => array( 'foo = :foo', 'dib IN (?)' => array(1, 2, 5), 'OR bar > ?' => $bar, ), // GROUP BY columns 'group' => array('zim.id'), // HAVING conditions 'having' => array( 'total > ?' => $total, ), // ORDER BY columns 'order' => array('total'), // you can use regular LIMITs ... 'limit' => array($count, $offset), // ... or let the model calculate a page-based LIMIT 'page' => $page_number, 'paging' => $rows_per_page, // do a followup query without limits to get a page count 'count_pages' => true, // bind these placeholder values to the query 'bind' => array('bar' => $bar), ); // fetch a collection using the fetch params $list = $model->blogs->fetchAll($fetch);
alias
-
正常情况下,模型在它产生的SELECT查询语句中只使用表名,不使用别名。但是你可以使用
alias
指定一个别名。在上面这个示例中,这将产生FROM blogs AS zim
。 cols
-
正常情况下,模型将获取表的所有字段。但是你可以使用
cols
选择你想要的字段,包括那些需要计算得到结果的字段。 where
-
这是一个WHERE从句的条件数组。每个元素采取两种形式中的一种。第一种是单值形式,这种将直接作为条件传递过去。第二种是键值对形式,其中键中包含一个或多个
?
占位符;为了防止SQL注入,值这时候才被引用,然后立即放置到SQL条件中。 group
-
指定GROUP BY从句使用的字段。
having
-
和
where
从句一样,这是一个HAVING从句的条件数组。 order
-
指定ORDER BY从句使用的字段。
limit
-
可能是一个用于指定LIMIT数量的整数;也可能是一个二元数组,用于指定LIMIT的数量和偏移量。这个参数将会覆盖
page
和paging
的值。 page
-
当和
paging
参数一起使用时,这将会获取结果集中指定页码的数据。 paging
-
在计算页码的时候,根据
page
值确定每页应该显示多少条记录。 count_pages
-
当这个参数设置为
true
时,这将在获取之后产生第二个查询。第二个查询将使用相同的参数执行COUNT(),但是不获取数据,也没有任何数量限制。它将以集合对象的开式返回记录数、页数、第一页和最后一页的页码和其他页的数据。除非你确信你使用分页,否则不要使用这个参数。 bind
-
这是一个键值对的数组,用于生成SELECT语句时,绑定指定的占位符。
通过使用魔术方法__call()
动态解析输入的方法名并且把它转化为一系列WHERE从句,模型对象允许获取记录和集合的简写形式。
有两种可识别的魔术方法:fetchAllBy...()
和fetchOneBy...()
。方法名中的其它词被当作被And
分隔的字段名(其中column_name
会被转化为ColumnName
)。方法的参数和方法名中字段的值相等;额外的获取参数中最后一个结尾参数也是可识别的(译者注:如下面示例中最后一个fetch)。
<?php
// fetch a single blog record WHERE foo = 'bar'
$item = $model->blogs->fetchOneByFoo('bar');
// fetch a collection of blogs WHERE foo = 'bar' AND baz = 'dib'
$list = $model->blogs->fetchAllByFooAndBaz('bar', 'dib');
// fetch a collection of blogs WHERE zim = 'gir',
// with additional parameters
$params = array('order' => 'id DESC');
$list = $model->blogs->fetchAllByZim('gir', $params);
Note | |
---|---|
魔术获取方法相对说来会慢一些,如果你发现自己大量重复地使用到一个特殊的获取数据过程,考虑在模型对象中为那个过程写一个方法。 |