Zend_Db_Select thường được sử dụng để viết các câu truy vấn phức
tạp, đòi hỏi phải kết nhiều bảng. Có nhiều người thích cách viết này vì
nó dễ hiểu, trực quan. Một điểm nữa là nó rất có lợi trong việc phân
trang...
Trong bài này, chúng ta sẽ cùng tìm hiểu thêm phương pháp tương
tác cơ sở dữ liệu với các câu truy vấn tùy ý từ Zend_Db_Select trong Zend Framework.
Bước 1: Cấu hình kết nối cơ sở dữ liệu
Trong file Bootstrap:
Bước 2: Khởi tạo đối tượng kết nối trong Model
Trong Model: ta viết hàm __construct() để lấy giá trị từ registry để đưa vào thuộc tính tên $db. Để mỗi khi ta khởi tạo đối tượng thì đối tượng kết nối đã được tạo sẵn.
Bước 3: Thực hiện truy vấn cơ sở dữ liệu
1. Cấu trúc đầy đủ:
2. Cấu trúc rút gọn
3. Cách sử dụng:
a. Lệnh From:
Ví dụ 1:
SQL: " SELECT * FROM products "
Ví dụ 2:
SQL : " SELECT p.* FROM products AS p "
Để chỉ rõ cột nào cần lấy ra, ta làm như sau:
Ví dụ 3:
SQL: " SELECT p.product_id, p.product_name
FROM products AS p
"
b. Lệnh Where
Ví dụ 1:
Ví dụ 2:
Ví dụ 3:
Ví dụ 4:
Ví dụ 5:
c. Lệnh Order:
d. Lệnh Limit
e .Join bảng:
Ví dụ 1:
Ví dụ 2:
4. Lấy kết quả truy vấn:
Bước 1: Cấu hình kết nối cơ sở dữ liệu
Trong file Bootstrap:
protected function _initDB() { $db = Zend_DB::factory("Pdo_mysql",array( "host"=>"localhost", "username"=>"root", "password"=>"xxxx", "dbname"=>"zend", "charset"=>"utf8" )); $db->setFetchMode(Zend_Db::FETCH_ASSOC); Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('db', $db); }Xem thêm về Cấu hình kết nối cơ sở dữ liệu trong Zend Framework
Bước 2: Khởi tạo đối tượng kết nối trong Model
Trong Model: ta viết hàm __construct() để lấy giá trị từ registry để đưa vào thuộc tính tên $db. Để mỗi khi ta khởi tạo đối tượng thì đối tượng kết nối đã được tạo sẵn.
class Default_Model_Chitiettin extends Zend_Db_Table_Abstract { protected $_name="chitiettin"; protected $_primary="idTin"; protected $_db; public function __construct() { $this->_db=Zend_Registry::get('db'); } }
Bước 3: Thực hiện truy vấn cơ sở dữ liệu
1. Cấu trúc đầy đủ:
// Create the Zend_Db_Select object $select = $this->_db->select(); // Add a FROM clause $select->from( ...specify table and columns... ) // Add a WHERE clause $select->where( ...specify search criteria... ) // Add an ORDER BY clause $select->order( ...specify sorting criteria... );
2. Cấu trúc rút gọn
$select = $this->_db->select() ->from( ...specify table and columns... ) ->where( ...specify search criteria... ) ->order( ...specify sorting criteria... );
3. Cách sử dụng:
a. Lệnh From:
Ví dụ 1:
SQL: " SELECT * FROM products "
$select = $this->_db->select()
->from( 'products' );
Ví dụ 2:
SQL : " SELECT p.* FROM products AS p "
$select = $this->_db->select()
->from( array('p' => 'products') );
Để chỉ rõ cột nào cần lấy ra, ta làm như sau:
Ví dụ 3:
SQL: " SELECT p.product_id, p.product_name
FROM products AS p
"
$select = $this->_db->select() ->from(array('p' => 'products'), array('product_id', 'product_name'));Hoặc
$select = $this->_db->select() ->from(array('p' => 'products'), array('p.product_id', 'p.product_name'));
b. Lệnh Where
Ví dụ 1:
// Build this query:
// SELECT product_id, product_name, price
// FROM "products"
// WHERE price > 100.00
$select = $db->select()
->from('products',
array('product_id', 'product_name', 'price'))
->where('price > 100.00');
Ví dụ 2:
// Build this query: // SELECT product_id, product_name, price // FROM "products" // WHERE (price > 100.00) $minimumPrice = 100; $select = $db->select() ->from('products', array('product_id', 'product_name', 'price')) ->where('price > ?', $minimumPrice);
Ví dụ 3:
// Build this query: // SELECT product_id, product_name, price // FROM "products" // WHERE (price > 100.00) // AND (price < 500.00) $minimumPrice = 100; $maximumPrice = 500; $select = $db->select() ->from('products', array('product_id', 'product_name', 'price')) ->where('price > ?', $minimumPrice) ->where('price < ?', $maximumPrice);
Ví dụ 4:
// Build this query: // SELECT product_id, product_name, price // FROM "products" // WHERE (price < 100.00) // OR (price > 500.00) $minimumPrice = 100; $maximumPrice = 500; $select = $db->select() ->from('products', array('product_id', 'product_name', 'price')) ->where('price < ?', $minimumPrice) ->orWhere('price > ?', $maximumPrice);
Ví dụ 5:
// Build this query: // SELECT product_id, product_name, price // FROM "products" // WHERE (price < 100.00 OR price > 500.00) // AND (product_name = 'Apple') $minimumPrice = 100; $maximumPrice = 500; $prod = 'Apple'; $select = $db->select() ->from('products', array('product_id', 'product_name', 'price')) ->where("price < $minimumPrice OR price > $maximumPrice") ->where('product_name = ?', $prod);
c. Lệnh Order:
// Build this query: // SELECT product_id, product_name, price // FROM "products" // WHERE (price > 100.00) // AND (price < 500.00) // ORDER BY product_id DESC $minimumPrice = 100; $maximumPrice = 500; $select = $db->select() ->from('products', array('product_id', 'product_name', 'price')) ->where('price > ?', $minimumPrice) ->where('price < ?', $maximumPrice) ->order('product_id DESC');
d. Lệnh Limit
// Build this query: // SELECT p."product_id", p."product_name" // FROM "products" AS p // LIMIT 10, 20 // Equivalent to: // SELECT p."product_id", p."product_name" // FROM "products" AS p // LIMIT 20 OFFSET 10 $select = $db->select() ->from(array('p' => 'products'), array('product_id', 'product_name')) ->limit(20, 10); // lay 20 dong tu dong thu 10
e .Join bảng:
Ví dụ 1:
// Build this query: // SELECT p."product_id", p."product_name", l.* // FROM "products" AS p JOIN "line_items" AS l // ON p.product_id = l.product_id $select = $db->select() ->from(array('p' => 'products'), array('product_id', 'product_name')) ->join(array('l' => 'line_items'), 'p.product_id = l.product_id');
Ví dụ 2:
// Build this query: // SELECT p."product_id", p."product_name", l."line_items_id" // FROM "products" AS p JOIN "line_items" AS l // ON p.product_id = l.product_id $select = $db->select() ->from(array('p' => 'products'), array('product_id', 'product_name')) ->join(array('l' => 'line_items'), 'p.product_id = l.product_id', array('line_items_id') );
4. Lấy kết quả truy vấn:
$select = $this->_db->select()
->from('products');
$stmt = $select->query();
$result = $stmt->fetchAll();
Lấy dòng đầu tiên của truy vấn. $select = $db->select()
->from('products');
$stmt = $select->query();
$result = $stmt->fetch();
Nguồn: http://framework.zend.com
Không có nhận xét nào:
Đăng nhận xét