Zend框架findManyToManyRowset,条件为第3列

时间:2011-01-21 15:26:03

标签: php zend-framework many-to-many

有没有办法可以在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 个答案:

答案 0 :(得分:2)

您可以将Zend_Db_Table_Select对象作为第五个参数传递给findManyToManyRowset()。在最终的select语句中,交集表的别名为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 :(得分:1)

这样的事情(这是Vika对答案的轻微修改):

$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);