Zend Framework findManyToManyRowset с условием на 3-й столбец - PullRequest
1 голос
/ 21 января 2011

Есть ли способ, которым я могу выполнить условие для таблицы соединения со многими ко многим в ZF?

Например, у меня есть таблица A |A_B | B

И B имеет столбцы A_ID |B_ID |ИЗДАНО

$model = new Model_DbTable_A();
$select = $model->select()->where('id = ?', $id);
$row = $model->fetchRow($select);
$b = $row->findManyToManyRowset('Model_DbTable_B', 'Model_DbTable_AB');

Ответы [ 2 ]

2 голосов
/ 21 января 2011

Вы можете передать объект Zend_Db_Table_Select в качестве пятого параметра findManyToManyRowset().В последнем операторе выбора таблица пересечений имеет псевдоним i.Таким образом, вы можете установить условие для таблицы пересечений следующим образом:

$select = $this->select()
               ->where( 'i.published = ?', true );
$b = $row->findManyToManyRowset(
               'Model_DbTable_B', 'Model_DbTable_AB', 
               $callerRefRule, $matchRefRule, 
               $select);

Очевидным недостатком этого подхода является то, что он слишком сильно полагается на Zend_Db_Table_Row_Abstract внутренних элементов и, следовательно, не выглядит ясным, если толькозаглядывая в findManyToManyRowset() определение.

1 голос
/ 22 января 2011

Что-то вроде этого (это небольшая модификация ответа Вики):

$model = new Model_DbTable_A();
$row = $model->find($id)->current(); // lite shortcut to get $row by $id

// get select object
$select = $model->select()->where('i.published = ?', true);

// fetch rows in B through A_B table where A_B.published is true
$b = $row->findManyToManyRowset('Model_DbTable_B', 'Model_DbTable_AB', null, null, $select);
...