Отношения Zend_Db из диаграммы

У меня есть следующие таблицы:

У каждого свой картограф:
Product_Model_DbTable_Product
Product_Model_DbTable_Category
Product_Model_DbTable_ProdCategRelation

Я видел некоторые учебники о том, как это делается, но я все еще не понимаю.


Вот что у меня сейчас есть:

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();
}

Могу ли я получить категорию продукта, используя эти отношения, просто создав экземпляр продукта, а не целую группу?


person nevvermind    schedule 03.02.2011    source источник


Ответы (1)


Вы можете использовать findManyToManyRowset для этой цели. Таким образом, ваш код может быть преобразован в:

$product = $productObj->fetchRow('id = 1');
$categoryInfo = $product->findManyToManyRowset(
    'Product_Model_DbTable_Category',
    'Product_Model_DbTable_ProdCategRelation'
)->current();
person Vika    schedule 03.02.2011
comment
Но без current(), который вернет только первую строку из набора строк - я думаю, что OP хочет их всех, если этот продукт имеет несколько категорий. - person Radek Benkel; 04.02.2011
comment
Я полагаю, что мои $_dependentTables и $_referenceMap подходят для этой цели. - person nevvermind; 04.02.2011
comment
@singles current() был взят только из исходного кода OP. Хотя я согласен, продукт - категория, вероятно, не отношения 1: 1. - person Vika; 04.02.2011