這是我第一次使用Zend Framework作爲應用程序,而且我不知道我是否完全通過模型頭腦。
我有四個表:shopping_cart,product,product_unit,distributor。 購物車有一個cart_id,product_id,unit_id和dist_id(購物車與其對應的id加入其他表)。
Zend公司之前,我將創建一個類是這樣的:
class ShoppingCart
{
function getItems()
{
$sql ="select * from shopping_cart, product, product_unit, distributor
where
shopping_cart.product_id = product.id AND
shopping_cart.unit_id = product_unit.id AND
shopping_cart.dist_id = distributor.id AND
cart_id = xxx";
$items = $this->db->getAll($sql);
}
一個查詢來從連接表的所有信息。
當我成立Zend_Db_Table_Abstract關係映射:
我的購物車型號:
class Application_Model_ShoppingCart
{
function __construct()
{
$this->ShoppingCartTable = new Application_Model_DbTable_ShoppingCart();
}
function getItems()
{
$cart_items = $this->ShoppingCartTable->getItems($this->GetCartId());
return $cart_items;
}
}
類Application_Model_DbTable_ShoppingCart擴展Zend_Db_Table_Abstract {
protected $_name = 'shopping_cart';
protected $_rowClass = 'Application_Model_DbTable_ShoppingCart_Item';
protected $_referenceMap = array(
'Product' => array(
'columns' => 'product_id',
'refTableClass' => 'Application_Model_DbTable_Product',
'refColumns' => 'id'
),
'Distributor' => array(
'columns' => 'dist_id',
'refTableClass' => 'Application_Model_DbTable_Distributor',
'refColumns' => 'id'
),
'Unit' => array(
'columns' => 'unit_id',
'refTableClass' => 'Application_Model_DbTable_ProductUnit',
'refColumns' => 'id'
)
);
public function getItems($cart_id)
{
$where = $this->getAdapter()->quoteInto('cart_id = ?', $cart_id);
return $this->fetchAll($where);
}
}
在我的控制器:
$this->_shoppingCartModel = new Application_Model_ShoppingCart();
$items = $this->_shoppingCartModel->getItems();
在我看來:
foreach($this->items AS $item)
{
$item_product = $item->findParentRow('Application_Model_DbTable_Product');
$item_dist = $item->findParentRow('Application_Model_DbTable_Distributor');
$item_unit = $item->findParentRow('Application_Model_DbTable_ProductUnit');
}
當我在我的車十項分貝探查顯示六十查詢(哇)來查看車中的項目(在所有四個信息將顯示錶格 - 產品名稱,單位描述,分銷商名稱)。 對於每個商品,它將查詢shopping_cart,然後查詢產品表,然後查詢產品單位,然後查詢distributor_table。
有沒有辦法讓這個運行成爲一個通過Zend_Db_Table_Abstract關係連接所有表的查詢?
我將不得不回到在我的Application_Model_ShoppingCart類中使用數據庫適配器嗎?
我想抽象的錶款(Application_Model_DbTable_ShoppingCart),而不是所有的數據訪問都將Application_Model_ShoppingCart綁到一個數據庫處理程序。
在此先感謝您的建議,我喜歡Zend Framework,但考慮到人們談論使用它們的不同方式時,模型仍然很難理解。
維卡謝謝你的快速反應......如果我使用Zend的表中選擇..是它更好地執行在自定義連接模型類Application_Model_ShoppingCart類或Application_Model_ShoppingCart_DbTable中? – 2010-09-17 04:03:48
非常感謝你的時間。乾杯 – 2010-09-17 14:46:52