使用CakePHP模型檢索數(shù)據(jù)
下面介紹如何使用CakePHP模型來檢索數(shù)據(jù)。有關CakePHP模型的配置,可參考之前一篇文章。
檢索數(shù)據(jù)
在CakePHP中有一些內置的模型方法(model methods),這些模型方法可以幫助開發(fā)者從數(shù)據(jù)庫的表中輕松檢索數(shù)據(jù)。我們將會在之前創(chuàng)建的Book模型身上試驗其中一些函數(shù)的用法。
使用模型來檢索數(shù)據(jù)
在很多情況下,我們需要找出符合某一條件的所有數(shù)據(jù)。在CakePHP中,對數(shù)據(jù)庫進行查詢操作都是通過模型的方法來完成的。CakePHP的模型都有一些內置的方法,這些方法可以讓開發(fā)者不用費多大力氣就可以輕松執(zhí)行這類查詢操作。在下面這一部分,我們將會看到一個循序漸進的實例,學習如何在數(shù)據(jù)庫表中檢索數(shù)據(jù)。
動手時間:使用模型來檢索數(shù)據(jù)
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操作創(chuàng)建一個視圖文件(視圖文件的位置:/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,現(xiàn)在在瀏覽器中打開如下鏈接,你會看到從一個數(shù)據(jù)庫表中檢索到并顯示出來的所有書的列表。
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模型中帶有參數(shù)的內置方法find(),然后將返回的結果存儲在一個名為$books的變量中。第一個參數(shù)all指明了我們想從books表中調取所有記錄。
我們可以通過定義第二個參數(shù)中的一些鍵(像條件,排序,限制)來對find()查詢返回的結果進行調整。我們將在后一部分更為詳細的學習這一非常實用的方法,
第二個參數(shù)包含一個關聯(lián)數(shù)組,它有兩個鍵:字段和排序。字段鍵也是一個數(shù)組,它是用來指明find()查詢所需要調取的 具體字段。我們只對ISBN書號,書名,以及作者感興趣。因此字段鍵的鍵值被設置成了一個只包含這些字段名稱的數(shù)組。第二個鍵order是用來指明查詢結果的排序方向。我們把它的鍵值設置成了Book.title ASC,這是告訴模型按照書名的升序來排序。
所有模型類都會從他們的父類繼承一些內置的方法。這些內置方法會讓開發(fā)者的工作輕松上許多,因為他們再也不用戶書寫SQL語句了。所有基本的CRUD功能 (創(chuàng)建,讀取,更新和刪除)以及其他一些功能已經包含在內,我們只需要知道如何使用他們即可。代碼看起來會干凈上許多,而與數(shù)據(jù)庫打交道不再是一件煩人的 重復性工作。這些簡潔而智能的功能會替我們書寫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數(shù)組進行了迭代循環(huán)操作,將所有我們需要的信息顯示出來。現(xiàn)在,訪問http://localhost/data-access/books/,我們會看到下面這樣一個頁面。
以上便實現(xiàn)了使用CakePHP模型進行數(shù)據(jù)檢索。
【編輯推薦】