Khanh Hoang - Kenn
Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.
Nội dung :
CREATE TABLE books ( id int(11) NOT NULL AUTO_INCREMENT, isbn varchar(13) NOT NULL, title varchar(64) NOT NULL, description text NOT NULL, PRIMARY KEY (id) ) INSERT INTO `books` VALUES ('1', 'abc', 'Kĩ thuật lập trình', 'abc'); INSERT INTO `books` VALUES ('2', 'c,c++', 'Lập trình C', 'lap trinh c'); INSERT INTO `books` VALUES ('3', 'C++', 'Cấu trúc dữ liệu và giả thuật', 'abc'); INSERT INTO `books` VALUES ('4', 'php', 'PHP căn bản', 'php, lap trinh php'); INSERT INTO `books` VALUES ('5', 'php nc', 'PHP Nâng cao', 'php,php nang cao'); INSERT INTO `books` VALUES ('6', 'php fw', 'PHP Framework', 'php, php framework');
Trong thư mục app/models/ tạo file book.php với nội dung sau :
<?php class Book extends AppModel{ var $name = "Book"; // tên cua Model Book }
Giải thích :
- Tên file và class Model được đặt ở dạng số ít
- Tên Model đặt giống với tên table tương ứng nhưng ở dạng số ít
- VD tôi có table users
Tên file Model dùng cho table users là : user.php
Tên class là : User
- Như trong ví dụ này tôi có table books thì
Tên file Model dùng cho table books là : book.php
Tên class là : Book
Trong thư mục app tạo file app_controller.php (app/app_controller.php)
<?php class AppController extends Controller { } ?>
Chú ý là class AppController để trống như trên
Trong thư mục app/controllers/ tạo file books_controller.php :
class BooksController extends AppController{ var $name = "Books"; // tên của Controller Book function exam01(){ $data = $this->Book->find("all"); $this->set("data",$data); } }
Ghi chú :
- Hàm :
$this->Book->find(“all”)
: Gọi Model Book , Model Book sẽ tự động lấy tất cả dữ liệu trong table books và trả về kết quả dạng mãng như sau
$this->set(“data”,$data)
: gán giá trị vào biến $data để hiển thị tương ứng
Trong thư mục app/view/ tạo file thư mục books tương ứng với Controller Books trên
Trong thư mục books , tạo file exam01.cpt :
<html> <body> <?php if($data==NULL){ echo "<h2>Dada Empty</h2>"; } else{ echo "<table> <tr> <td>id</td> <td>Title</td> </tr>"; foreach($data as $item){ echo "<tr>"; echo "<td>".$item['Book']['id']."</td>"; echo "<td><a href='books/view/".$item['Book']['id']."' >".$item['Book']['title']."</a></td>"; echo "</tr>"; } } ?> </body> </html>
Vậy cuối cùng ta có 3 file như sau :
- app/models/book.php
<?php class Book extends AppModel{ var $name = "Book"; // tên cua Model Book }
- app/controlllers/books_controller.php
class BooksController extends AppController{ var $name = "Books"; // tên của Controller Book function exam01(){ $data = $this->Book->find("all"); $this->set("data",$data); } }
-app/views/books/exam01.ctp
<html> <body> <?php if($data==NULL){ echo "<h2>Dada Empty</h2>"; } else{ echo "<table> <tr> <td>id</td> <td>Title</td> </tr>"; foreach($data as $item){ echo "<tr>"; echo "<td>".$item['Book']['id']."</td>"; echo "<td><a href='books/view/".$item['Book']['id']."' >".$item['Book']['title']."</a></td>"; echo "</tr>"; } } ?> </body> </html>
Chạy thử để kiểm tra kết quả : http://localhost/cakephp/books/exam01
Thêm vào Controller Book với function exam02 :
class BooksController extends AppController{ var $name = "Books"; // tên của Controller Book function exam01(){ $data = $this->Book->find("all"); $this->set("data",$data); } function exam02(){ $sql = array( "conditions"=> array( "title LIKE"=> "PHP%", ), “limit” => “0,2” ); $data = $this->Book->find("all",$sql); $this->set("data",$data); } }
Ghi chú
-Tham số “conditions” ơ đây ý nói điều kiện lọc . Ở đây tôi lọc “những title chuỗi bắt đầu là PHP và phía sau là gì cũng được”
- Bạn có thể thêm điều kiệu lọc như “lấy tất cả ngoại trừ id có giá trị là 4”
- Vậy Controller Books bây giờ là :
class BooksController extends AppController{ var $name = "Books"; // tên của Controller Book function exam01(){ $data = $this->Book->find("all"); $this->set("data",$data); } function exam02(){ $sql = array( "conditions"=> array( "title LIKE"=> "PHP%", “id !=” => 4, ), “limit” => “0,2” ); $data = $this->Book->find("all",$sql); $this->set("data",$data); } }
Trog app/views/books Tạo file exam02.ctp :
<html> <body> <?php if($data==NULL){ echo "<h2>Dada Empty</h2>"; } else{ echo "<table> <tr> <td>id</td> <td>Title</td> </tr>"; foreach($data as $item){ echo "<tr>"; echo "<td>".$item['Book']['id']."</td>"; echo "<td>".$item['Book']['title']."</td>"; echo "</tr>"; } } ?> </body> </html>
Chạy kiểm tra thử : http://localhost/cakephp/books/exam02
- Bình thường ở đây là ta viết 1 câu truy vấn hoàn chỉnh và thực thi nó, không dùng các hàm
Hổ trợ sẵn của CakePHP , bởi đôi lúc ta cần thực thi những câu truy vấn dài và phức tạp mà lại không nhớ cách viết của CakePHP thì dùng phương pháp này
Thêm vào Controller Book function exam03 :
function exam03(){ $sql = "Select * From books"; $data = $this->Book->query($sql); $this->set("data",$data); }
Trong app/views/books/ tạo file exam03.ctp :
<html> <body> <?php if($data==NULL){ echo "<h2>Dada Empty</h2>"; } else{ echo "<table> <tr> <td>id</td> <td>Title</td> </tr>"; foreach($data as $item){ echo "<tr>"; echo "<td>".$item['books']['id']."</td>"; echo "<td>".$item['books']['title']."</td>"; echo "</tr>"; } } ?> </body> </html>
Chạy kiểm tra thử : http://localhost/cakephp/books/exam03
Vậy qua bài này ta cần lưu ý các điểm sau :
- Tên table đặt dạng số nhiều , Model tương ứng cùng tên và ở dạng số ít . Vd : table users -> Moldel User
- Các hàm truy vấn CSDL :
+ $this->Book->find("all");
+ $this->Book->find("all",dieu_kien);
+ $this->Book->query(cau_truy_van_sql);
+ $this->Book->getNumRows();
Source code ví dụ trên :
- database/books
- app/..
+ controllers/..
+ models/..
+ views/..
+ app_controller.php