魔法查询函数

魔法查询函数通常被用作对数据库表特定字段进行搜索的一种便捷方式。在先前的一个例子中,我们要搜索一本ISBN书号为 1234567890的书。我们是使用find()方法执行搜索任务的。但是我们也可以像下面这样使用魔法查询函数来完成同样的任务:

$book = $this->Book->findByIsbn('1234567890');

这种方法明显要简短一些,而且它会进行跟之前find()实例完全一样的查询。

findBy<字段名>()函数是由CakePHP动态创建的。这个魔法函数是在findBy(这是骆驼拼写法的形式)后面添加上我们想搜索的数据库表的字段名而构成的。

findBy<字段名>函数的基本结构如下:

findBy<字段名>(值, 字段名, 排序)(其中值的数据类型是字符串,字段的数据类型是数组,排训的数据类型是字符串)

第一个参数 $value(值)是指我们所需找查找的字段值。第二个参数$fields(字段)是一个数组,其中包含查询应该返回的字段名称。第三个参数是 $order(排序)指定了结果的排序。跟find('first')一样,findBy<字段名称>() 函数只会返回符合指定条件的第一条记录。

魔法查询函数的另一种形式类似于find(‘all’)方法——它会返回所有符合给定条件的记录。这个函数有一个findAllBy前缀,基本的形式如下:

findAllBy<字段名>(值, 字段, 排训,返回结果的数量)(其中值的数据类型是字符串,字段的数据类型是数据,排训的数据类型是字符串,返回结果数量的数据类型是整数)

findAllBy<字段名>() 函数会返回所有指定字段值等于第一个参数$value(值)的记录,第二个参数和第三个参数与findBy<字段名>() 函数的一样。第四个参数 $limit 是用来指定查询返回的结果数量限制。

现在,让我们看看findAllBy<字段名>() 函数的简单实例。请回想一下之前的一个例子,在那个例子中我们要搜索出所有由 'David Barnes' 撰写并按照书名排序的所有书的标题。我们也可以使用神奇的findAllBy<字段名>() 函数来达到同样的效果,像下面这样:

$books = $this->Book->findAllByAuthorName('David Barnes', array('Book.title'),'Book.title ASC'));

findBy<字段>()函数和findAllBy<字段>() 函数的输出结果是一个数组,这些结果的格式分别与 find('first')和 find('all')方法获得的结果相一致。


读取单个字段

在某些情况下,我们只想读取一条记录中的单个字段。尽管我们也可以使用find()方法来实现这点。但是CakePHP针对此类任务提供了一种更简单完成方法,比如,要获取ISBN书号为 1904811299的书的书名,我们可以在BooksController中使用如下代码:

$this->Book->field('title', array('isbn' => '1904811299'));

field()方法的构成形式如下:

field(string $name, string $conditions, string $order)

field() 方法只会返回第一条记录中$name参数指定的单个字段的值。第二个参数$conditions定义了查询条件,而第三个参数$order定义了结果的排序方式。

现在,在这一章节,我们学习了如何使用CakePHP的模型方法从数据库表中检索数据。但是如何数据库中没有数据的话,数据检索也毫无意义。而向数据库中保存数据则是我们下一步将要学习的内容。

posted @ 2012-02-16 17:13  夏至冬末  阅读(173)  评论(0编辑  收藏  举报