> > > Zend Framework 7: Tương tác cơ sở dữ liệu với Zend_Db_Table

Zend Framework 7: Tương tác cơ sở dữ liệu với Zend_Db_Table

Kết thúc bài vừa rồi, chúng ta đã tìm hiểu về quy trình làm việc trên view và cơ bản về layout trong zend framework. Tiếp tục ở bài này, tôi sẽ hướng dẫn các bạn tìm hiểu về quy trình tương tác cơ sở dữ liệu trên model như thế nào
Máy Massage Điểm G Fairy
 
Dương Vật Giả Pretty Love Daniel
 

Bán tài liệu zend tiếng việt: 500.000 vnđ (500 k)

Hotline: 0933.381.903
Yahoo: Mua bán online
Email: songthan.hctm@gmail.com

Zend Framework cho ta nhiều phương pháp để tương tác với cơ sở dữ liệu. Và một trong những lớp tương tác với model mà tôi lựa chọn ở đây chính là lớp Zend_Db_Table.

Vậy trước hết, ta tìm hiểu xem model là gì ?. Và tại sao phải sử dụng model ?. Model là tầng xử lý những tác vụ liên quan đến tương tác cơ sở dữ liệu từ những yêu cầu của controller. Model xử lý và trả về kết quả dưới dạng một mảng dữ liệu, khi đó thông qua view ta sẽ đẩy nội dung của mảng dữ liệu ấy ra bên ngoài. Việc tách biệt tầng model có rất nhiều thuận lợi, trước là dễ quản lý sau là dễ nâng cấp và phát triển trong tương lai của mã nguồn.

Để tương tác được với Model thì trước tiên ta phải kết nối được với cơ sở dữ liệu. Vậy ta tạo 1 bảng user với các cú pháp như sau:

Mã:
CREATE TABLE user (
  id int(10) unsigned NOT NULL AUTO_INCREMENT,
  username varchar(50) NOT NULL,
  password char(32) NOT NULL,
  level int(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (id)
);
INSERT INTO 'user' (username,password,level) VALUES('admin', '12345', 2);
INSERT INTO 'user' (username,password,level) VALUES('kenny', '12345', 2);
INSERT INTO 'user' (username,password,level) VALUES('jacky', '12345', 1);
INSERT INTO 'user' (username,password,level) VALUES('Lena', '12345', 1);

Tiếp tục ta kết nối với cơ sở dữ liệu bằng cách thêm vào file application.ini của chúng ta những đoạn lệnh sau:
 

Mã:
resources.db.adapter = "Pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = ""
resources.db.params.dbname = "qhonline"

Đoạn thông tin này khai báo cho hệ thống biết các tham số như host, user, pass, dbname.

Sau khi đã kết nối được với cơ sở dữ liệu, tiếp theo. Chúng ta sẽ tạo file User.php trong thư mục Model với nội dung như sau:

PHP Code:
class Model_User extends Zend_Db_Table_Abstract{
    protected 
$_name="user";
    protected 
$_primary="id";
    public function 
listall(){
        return 
$this->fetchall()->toArray();
    }
}

Qua đoạn lệnh trên ta hiểu phần nào về quy tắc định nghĩa một lớp model trong zend framework. Vì tất cả các file nằm trong thư mục Model nên áp dụng theo cơ chế lazy loading ta có quy tắc định nghĩa: Model_Tênfile. Cụ thể ở đây tôi tạo ra file User.php, nên lớp của tôi định nghĩa sẽ là Model_User.

Lưu ý là thư mục Models của chúng ta có s, nhưng khi định nghĩa thì chúng ta bỏ qua s và viết bình thường là Model.

Trong lớp Model_User ở trên, ta kế thừa lớp Zend_Db_Table_Abstract. Và khai báo tên bảng, tên khóa chính thông qua hai thuộc tính $_name và $_primary. Cuối cùng, ta định nghĩa phương thức listall() và dùng phương thức fetchall() để lấy toàn bộ dữ liệu vốn có trong bảng user.

Ở đây zend framework sử dụng cơ chế Active Record. Nên phương thức $this->fetchall() nó tương đương với cú pháp lặp toàn bộ dữ liệu từ câu truy vấn select * from user vậy.

Sau cùng, ta tạo lớp UserController trong file controllers/UserController.php với nội dung sau:

PHP Code:
class UserController extends Zend_Controller_Action{
    public function 
indexAction(){
        
$muser=new Model_User;
        echo 
"
";

		        print_r($muser->listall());

		        echo "
";
    }
}

Lưu ý là ta phải tạo trong thư mục views/scripts/user/index.phtml để controller tìm kiếm thấy view khi được gọi. (xem bài tìm hiểu về view trong zend framework).

Để sử dụng được Model trong controller ta phải khởi tạo đối tượng từ lớp Model mà ta đã định nghĩa ở trên. Sau đó từ đối tượng ta lại gọi các phương thức muốn thực thi. Lệnh

 ở trên được dùng để trình bày dữ liệu dạng mảng.

	

	Chạy thử nghiệm với đường dẫn: http://localhost/zfexam/user/ 

	

	Kết quả sẽ thông báo lỗi:

 


	
		
			Fatal error: Class 'Model_User' not found in C:xampphtdocszfexamapplicationcontrollersUse rController.php on line 4

 

Hệ thống của chúng ta chưa hiểu được lớp Model_User. Vì thế ta cần phải định nghĩa như sau trong file bootstrap.php:

 

PHP Code:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{     protected function _initAutoload(){          $autoloader = new Zend_Application_Module_Autoloader(array(                      'namespace' => '',                      'basePath' => dirname(__FILE__),                  ));          return $autoloader;      }  }

 

Như các bạn thấy đấy, ta đã thêm vào phương thức autoload để định nghĩa cho hệ thống biết được đường dẫn tới các lớp mà ta tạo trong Model và form sau này.  Chạy thử nghiệm lại với đường dẫn: http://localhost/zfexam/user/ Kết quả sẽ hiển thị danh sách user dưới dạng mảng như ta mong đợi. Một số phương thức thường dùng trong lớp Zend_Db_Table 1- Thao tác liệt kê và nhận dữ liệu: Để có thể thực hiện các thao tác liệt kê dữ liệu đầy đủ và chi tiết. Chúng ta cần sử dụng phương thức:

 

PHP Code:
$this->select()  

 

Và từ phương thức này, chúng ta sẽ gọi các thao tác khác liên quan như điều kiện, giới hạn, sắp xếp,…

 

PHP Code:
$query=$this->select();  

 

+ Liệt kê thông tin theo cột:

 

PHP Code:
$query->from('tên_bảng',array('cột 1','cột 2'));  

 

+ Liệt kê thông tin với một điều kiện:

 

PHP Code:
$query->where('cột =?','giá trị');  

 

Cú pháp ở trên cho ta liệt kê dữ liệu với điều kiện cột bằng giá trị nào đó. Quy tắc trong zend framework đối với mệnh đề where là tên cột, rồi đến phép so sánh, rồi đến ký hiệu "?". Và sau cùng là mới là giá trị. + Sắp xếp thông tin theo cột thuộc tính

 

PHP Code:
$query->order('tên_cột ASC hoặc DESC');  

 

+Giới hạn thông tin hiển thị

 

PHP Code:
$query->limit(vị trí bắt đầusố record muốn hiển thị);  

 

+ Hiển thị tất cả thông tin:

 

PHP Code:
$this->fetchall();  

 

Trường hợp hiển thị với các điều kiện ở phía trên thì ta truyền $query vào fetchall()

 

PHP Code:
$this->fetchall($query);  

 

+ Hiển thị 1 dòng dữ liệu

 

PHP Code:
$this->fetchRow();  

 

Ví dụ:

 

PHP Code:
public function listuser()   {       $data=$this->select();     $data->from('user',array('username','id'));     $data->where('id > ?',1);     $data->order('username DESC');     $data->limit(3);     $data=$this->fetchAll($data);     return $data; }  

 

2- Thao tác thêm, xóa, sửa dữ liệu: + Thêm dữ liệu:

 

PHP Code:
$this->insert($data);  

 

Ví dụ:

 

PHP Code:
  public function insert_user($data){            $this->insert($data);   }  

 

+ Sửa dữ liệu:

 

PHP Code:
$this->update($data,$where);  

 

Ví dụ:

 

PHP Code:
public function update_user($data,$where){       $where="id='1'";     $this->update($data,$where); }  

 

+ Xóa dữ liệu:

 

PHP Code:
$this->delete($where);  

 

Ví dụ:

 

PHP Code:
public function delinfo($id){     $where="id=".$id;     $this->delete($where); }  

 

Kết thúc bài này, ta đã hiểu được cơ bản về cách thức sử dụng Model trong Zend Framework, đồng thời cũng nắm được phần nào về các phương thức phổ biến thường sử dụng trong ứng dụng. Trong bài kế tiếp, tôi sẽ hướng dẫn các bạn tìm hiểu về phương pháp tương tác với cơ sở dữ liệu trên lớp Zend_Db. Qua đó có sự tùy biến tốt hơn trong việc viết ứng dụng trên zend framework.

 

Bán tài liệu zend tiếng việt: 500.000 vnđ (500 k)

Hotline: 0933.381.903
Yahoo: Mua bán online
Email: songthan.hctm@gmail.com