Defining
可以直接用欄位繼承的方式來定義資料表
class Table extends Zend_Db_Table_Abstract |
繼承 Zend_Db_Table_Abstract
後,即可做 Active Record 的操作。
Initial
Zend_Db_Table
要能正常執行,就必須要有一個 adapter 物件,傳入的方法如下
// adapter 物件 |
Quote
Zend_Db_Table
本身並沒有提供 quote 的方法,不過有取得 adapter 的方法,quote 方法參考 Zend_Db_Adapter
$adapter = $table->getAdapter(); |
Insert
跟 Zend_Db_Adapter 的方法一樣,只是因為已經知道是哪個 Table 了,所以不需要傳入 Table 參數。
$data = array( |
Update
跟 Zend_Db_Adapter 的方法差不多
$data = array( |
Delete
$where = $table->getAdapter()->quoteInto('id = ?', 1); |
Find
依 primary key 去找 record,Find 得到的都會是 Rowset 物件
// 單筆 |
Query
取得 Zend_Db_Table_Select 物件
$select = $table->select(); |
Relationship
Zend_Db_Table_Abstract 可以設定 Table 與 Table 間的關聯:
class Table extends Zend_Db_Table_Abstract |
One-To-One, Many-To-One
在廣義的定義上,一對一和多對一其實基本概念是一樣的東西:
A 資料表某個欄位,關聯到 B 資料表的某一個 unique 屬性的欄位
如:「文章資料表規定每篇文章只能歸類在某個分類裡;該欄位的值即為分類資料表的唯一鍵。」
Zend 可以設定這兩個資料表的關聯:
A 資料表(文章資料表)己設定如下:
class Article extends Zend_Db_Table_Abstract |
在取得 Row 之後,可以用下面的方法取得 Category 物件:
// $row->findParentRow($table, [$rule], [$select]); |
B 資料表(分類資料表)不一定要設定,如果要設定的話,如下:
class Category extends Zend_Db_Table_Abstract |
在取得 Row 之後,可以用下面的方法取得 Rowset 物件:
// $row->findDependentRowset($table, [$rule], [$select]); |
Cascading Operations
總共有四種動作:
Constant | Description |
---|---|
Zend_Db_Table_Abstract::CASCADE | 關聯的記錄會進行刪除或修改 |
Zend_Db_Table_Abstract::CASCADE_RECURSE | 與 CASCADE 同,不過會做遞迴確認到最上層的父資料表 |
Zend_Db_Table_Abstract::RESTRICT | 有存在關聯記錄時,會禁止父資料表刪除或修改 |
Zend_Db_Table_Abstract::SET_NULL | 把有關聯的記錄行設定成 NULL |