日期:2012-05-03 浏览次数:20484 次
我们已经知道使用模型内置方法find()对数据库表进行数据检索的基本方法。find()方法的确非常强大,而且我们可以使用它来完成复杂的查询。我们将会学习更多有关find()方法的内容,了解如何通过它来执行复杂的查询。我们也将学习如何使用CakePHP提供的其他数据检索技巧。
find() 方法非常灵活,它可以实现SQL语言中SELECT查询语句所能实现的所有结果。比如,我们只检索书名以字母“A"开头并按照ISBN书号降序排列的前两本书的书号字段和作者名字字段,我们曾需要写出下面这个SQL查询语句:
SELECT `Book`.`isbn`, `Book`.`title`, `Book`.`author_name`
FROM `books` AS `Book`
WHERE `Book`.`title` LIKE 'A%'
ORDER BY `Book`.`isbn` DESC
LIMIT 2;
在CakePHP中,我们可以通过像下面这样使用find()方法来得到同样的结果。
find(
'all',
array(
'conditions' => array('Book.title' => 'LIKE A%'),
'fields' => array(
'Book.isbn',
'Book.title',
'Book.author_name'
),
'order' => 'Book.isbn DESC',
'limit'=>2
)
);
[ |
在条件(condition)中,为字段添加上模型名称前缀(像写成Book.title而非title)是一个很好的习惯。当我们需要调取相关模型中的数据并且结果中有相同的字段名称时,这个习惯就尤其重要。另外它也改善了代码的清新度 |
] |
find()方法接受两个参数:$type(类型)和$constraints(约束)。$type(类型)是一个用来定义查询“类型”的字符串。$type可以设成下面这三种类型中的一个
正如我们从上一个例子中所看到那样,我们可以以关联数组(associative array)的形式在第二个参数 $constraints中指定其他查询约束。$constraints参数的关联数组可以有如下键(key)
为了便于读者更清楚地了解这个概念,我们将会快速浏览下面这些表明了find()用法的例子:
1,如果你想知道书名以字母“A”开头的书的数目,我们会在BooksController(Books控制器中)添加如下代码:
$count = $this->Book->find('count', array('conditions' =>
array('Book.title' => 'LIKE A%'));
It executes the following