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

 
3 điều quan trọng để Go live cho Drupal Emmy’s website

3 điều quan trọng để Go live cho Drupal Emmy’s website

When preparing for a big event, it is our job to make sure the general public sees exactly what is expected, and with the help of Amazon Web Service (AWS) we did! All planning comes with a few standard issue assessments/steps: Identify need, identify options, and begin to build!

Apple gặp thất bại khi kiện Galaxy Tab 10.1N tại Đức

Apple gặp thất bại khi kiện Galaxy Tab 10.1N tại Đức

Apple đã kiện Samsung Galaxy Tab 10.1N ở Đức nhưng thật không may tòa án ở đây đã bác đơn kiện của hãng này.

Drupal Disruptive Open Source: Part I — From Brobdingnag to Lilliput

Mã nguồn mở Drupal Disruptive: Phần 1- từ Brobdingnag đến Lilliput

Drupal's founder, Dries Buytaert, in his keynote at the 2010 San Francisco Drupalcon, asked the rhetorical question: Is Drupal a disruptive technology?

Tomdesgin.vn

 

Drupal Services