图中的Zend_Db关系

时间:2011-02-03 20:12:18

标签: zend-framework zend-db table-relationships

我有以下表格:
http://i51.tinypic.com/wk1rvb.png

每个都有自己的映射器:
Product_Model_DbTable_Product
Product_Model_DbTable_Category
Product_Model_DbTable_ProdCategRelation

我见过some tutorials关于它是如何完成的,但我仍然没有得到它。


这就是我目前所拥有的:

class Product_Model_DbTable_Product extends Zend_Db_Table_Abstract
{

    protected $_name = 'product';
    protected $_dependentTables = array('Product_Model_DbTable_ProdCategRelation');
}

class Product_Model_DbTable_Category extends Zend_Db_Table_Abstract
{

    protected $_name = 'category';
    protected $_dependentTables = array('Product_Model_DbTable_ProdCategRelation');
}

class Product_Model_DbTable_ProdCategRelation extends Zend_Db_Table_Abstract
{
    protected $_name = 'product_category';
    protected $_referenceMap = array(
        'Product' => array(
            'columns' => 'pid',
            'refTableClass' => 'Product_Model_DbTable_Product',
            'refColumns' => 'id'
        ),
        'Category' => array(
            'columns' => 'cid',
            'refTableClass' => 'Product_Model_DbTable_Category',
            'refColumns' => 'id'  
        )
    );
}

我的实验控制器代码(或多或少有效,但方法似乎不对;也可以回到普通的表连接):

public function indexAction()
{
    $productObj = new Product_Model_DbTable_Product;
    $categoryObj = new Product_Model_DbTable_Category();

    $product = $productObj->fetchRow('id = 1');
    $productRelation = $product->findDependentRowset('Product_Model_DbTable_ProdCategRelation', 'Product')->current();

    $category = $categoryObj->fetchRow('id = ' . $productRelation->cid);
    $categoryInfo = $category->findDependentRowset('Product_Model_DbTable_ProdCategRelation', 'Category')->current();
}

我是否可以通过实例化产品而不是整个产品来使用这些关系来获取产品的类别?

1 个答案:

答案 0 :(得分:1)

您可以将findManyToManyRowset用于此目的。因此,您的代码可能会转换为:

$product = $productObj->fetchRow('id = 1');
$categoryInfo = $product->findManyToManyRowset(
    'Product_Model_DbTable_Category',
    'Product_Model_DbTable_ProdCategRelation'
)->current();