使用CakePHP模型检索数据实例

来源:岁月联盟 编辑:zhuzhu 时间:2009-09-22

检索数据

在CakePHP中有一些内置的模型方法(model methods),这些模型方法可以帮助开发者从数据库的表中轻松检索数据。我们将会在之前创建的Book模型身上试验其中一些函数的用法。

使用模型来检索数据

在很多情况下,我们需要找出符合某一条件的所有数据。在CakePHP中,对数据库进行查询操作都是通过模型的方法来完成的。CakePHP的模型都有一些内置的方法,这些方法可以让开发者不用费多大力气就可以轻松执行这类查询操作。在下面这一部分,我们将会看到一个循序渐进的实例,学习如何在数据库表中检索数据。

动手时间:使用模型来检索数据

1,在BooksController中去除掉脚手架,然后在控制器中添加一个index操作,代码如下

< ?php  
    class BooksController extends AppController {  
       var $name = 'Books';  
    function index() {  
       $books = $this->Book->find('all',   
                 array(  
                        'fields' => array( 'fields' => array(  
                                          'Book.isbn',  
                                          'Book.title',  
                                          'Book.author_name' 
                                   ),  
                        'order' => 'Book.title ASC' 
                        )  
                                   );      
       $this->set('books', $books);  
                     }  
    }  
    ?>  

2,为/books/index操作创建一个视图文件(视图文件的位置:/app/views/books/ index.ctp)

< table> 
  < thead> 
    < th>ISBN< /th>< th>Title< /th>< th>Author< /th> 
  < /thead> 
  < ?php foreach($books as $book): ?> 
  < tr> 
    < td>< ?php echo $book['Book']['isbn'] ?>< /td> 
    < td>< ?php echo $book['Book']['title'] ?>< /td> 
    < td>< ?php echo $book['Book']['author_name'] ?>< /td> 
  < /tr> 
  < ?php endforeach; ?> 
< /table> 

3,现在在浏览器中打开如下链接,你会看到从一个数据库表中检索到并显示出来的所有书的列表。

http://localhost/data-access/books/

怎么回事?

首先,我们在BooksController中移除了脚手架,然后,我们在其中添加了一个名为index的新操作。通过在index()操作中调用 BooksController的属性 $this->Book ,我们可以访问对应的模型Book。在CakePHP中,对应模型类的实例(instance)在控制器中会作为控制器的属性供人使用。我们在 index()操作中添加如下代 码:

$books = $this->Book->find('all',   
             array(  
                    'fields' => array(  
                                      'Book.isbn',  
                                      'Book.title',  
                                      'Book.author_name' 
                                ),  
                    'order' => 'Book.title ASC' 
              )  
      );  

我们已经调用了Book模型中带有参数的内置方法find(),然后将返回的结果存储在一个名为$books的变量中。第一个参数all指明了我们想从books表中调取所有记录。

我们可以通过定义第二个参数中的一些键(像条件,排序,限制)来对find()查询返回的结果进行调整。我们将在后一部分更为详细的学习这一非常实用的方法,

第二个参数包含一个关联数组,它有两个键:字段和排序。字段键也是一个数组,它是用来指明find()查询所需要调取的具体字段。我们只对ISBN书号,书名,以及作者感兴趣。因此字段键的键值被设置成了一个只包含这些字段名称的数组。第二个键order是用来指明查询结果的排序方向。我们把它的键值设置成了Book.title ASC,这是告诉模型按照书名的升序来排序。

所有模型类都会从他们的父类继承一些内置的方法。这些内置方法会让开发者的工作轻松上许多,因为他们再也不用户书写SQL语句了。所有基本的CRUD功能(创建,读取,更新和删除)以及其他一些功能已经包含在内,我们只需要知道如何使用他们即可。代码看起来会干净上许多,而与数据库打交道不再是一件烦人的重复性工作。这些简洁而智能的功能会替我们书写SQL查询语句。

Array  
(  
    [0] => Array  
        (  
            [Book] => Array  
                (  
                    [isbn] => 1847192971  
                    [title] => Building Powerful and Robust   
                                                      with D  
                   [author_name] => David Mercer  
                )  
        )  
    [1] => Array  
        (  
            [Book] => Array  
                (  
                    [isbn] => 1847192823  
                    [title] => Mastering Joomla! 1.5 Extensi  
                                               Framework Dev  
                 [author_name] => James Kennard  
                )  
        )  
 ...  
 ...  
)  

在我们的视图文件中,我们对$books数组进行了迭代循环操作,将所有我们需要的信息显示出来。现在,访问http://localhost/data-access/books/,我们会看到下面这样一个页面。

使用CakePHP模型检索数据 

以上便实现了使用CakePHP模型进行数据检索。