有没有办法可以在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');
答案 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);