Hướng dẫn học: Các kiểu truy vấn CSDL đơn giản với CakePHP

Hướng dẫn học: Các kiểu truy vấn CSDL đơn giản với CakePHP

Nội dung :

  • Kết nối CSDL
  • Hiển thị thông tin từ CSDL với các kiểu truy vấn đơn giản và thông dụng

1.Tạo CSDL :

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

Hướng dẫn học: Các kiểu truy vấn CSDL đơn giản với CakePHP

2.Truy vấn có điều kiện :

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

3.Truy vấn theo cách bình thường:

- 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

Tags: 
Bạn thấy bài viết này như thế nào?: 
No votes yet
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Sử dụng Nginx và memcached để tăng tốc Apache trên Debian Lenny

Sử dụng Nginx và memcached để tăng tốc Apache trên Debian Lenny

Trong bài viết này, tôi giới thiệu cách thức cài đặt Nginx kết hợp với memcached trên Debian “lenny” 5.0 nhằm tăng hiệu năng

Phễu traffic - Phễu bán hàng trở thành một xu thế tất yếu trong Marketing Online

Phễu traffic - Phễu bán hàng trở thành một xu thế tất yếu trong Marketing Online

Phễu bán hàng đang trở thành một xu thế tất yếu trong Marketing Online, bạn cần hiểu vào áp dụng ngay vào doanh nghiệp của bạn

Thị trường bất động sản 2019 có thể xảy ra tình trạng tăng giá đất nền tại một số khu vực

Thị trường bất động sản 2019 có thể xảy ra tình trạng tăng giá đất nền tại một số khu vực

Dòng vốn ngoại tiếp tục đổ bộ, nhu cầu nhà ở của người dân còn lớn… là những yếu tố sẽ tạo nên gam màu sáng cho thị trường bất động sản năm 2019. Tuy nhiên, thị trường vẫn còn nhiều thách thức

Công ty diệt chuột T&C

 

Diet con trung