Возможно ли использовать _referenceMap с join () на Zend_Db_Select? - PullRequest
1 голос
/ 04 июня 2010

Пример:

class Products extends Zend_Db_Table_Abstract
{
    protected $_name = 'products';

    protected $_referenceMap    = array(
        'Bug' => array(
            'columns'           => array('bug_id'),
            'refTableClass'     => 'Bugs',
            'refColumns'        => array('bug_id')
        )
    );

}

$object = new Products();

$select = $object->select()->from()->Join('Bug');

Вместо определения полного оператора соединения

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Это полезно для одной строки, но не для всей таблицы (или нескольких строк). Мне обычно нужны запросы, затрагивающие более одной строки ... Zend должен реализовать опцию, упомянутую Phliplip, или нечто подобное:

$select = $object->select()->from()->Join('Bug');

Примечание: я имею в виду, используя только один запрос

1 голос
/ 17 сентября 2010

Насколько я могу судить, $ _referenceMap не используется таким образом. $ _referenceMap определяет связь строки таблицы с другими таблицами.

Вот почему связанные функции findDependentRowset (), findManyToManyRowset () и findParentRow () находятся в Zend_db_Table_Row_Abstract. Эти методы создают соединения.

Таким образом, чтобы получить зависимые строки от Багов, используя объект выбора, вы должны сделать что-то вроде этого, предполагая, что у Продуктов есть отношение один-ко-многим с Багами;

class Products extends Zend_Db_Table_Abstract
{
    protected $_name             = 'products';
    protected $_dependentTables  = array('Bugs');
}

class Bugs extends Zend_Db_Table_Abstract
{
    protected $_referenceMap = array(
        'Products' => array(
            'columns'            => array('bug_id')
            ,'refTableClass'     => 'Products'
            ,'refColumns'        => array('bug_id')
        )
    );
}

Чтобы получить зависимые строки, сначала нужно выбрать родительскую строку.

$products = new Products();

$productRow = $products->find(123)
                       ->current();

Вы можете уточнить соединение, используя Zend_Db_Select

$select = $products->select()
                   ->where('foo_bar = ?', 'cheese')
                   ->limit(2);

Наконец, выполняется запрос к зависимым строкам путем передачи объекта выбора вместо ключа правила.

$bugRowset = $productRow->findDependentRowset('Bugs', 'Products', $select);

Я думаю, что это сработает, я должен проверить завтра утром.

...