По определение , Шлюз TableData обрабатывает только одну таблицу.
ZF применяет это определение с проверкой целостности в Zend_Db_Table_Selects. Тем не менее, проверка целостности может быть отключена, а затем вы можете делать соединения. Просто создайте метод внутри вашего класса таблицы, чтобы выполнить соединение через объект select следующим образом:
public function findByIdAndJoinFoo($id)
{
$select = $this->select();
$select->setIntegrityCheck(false) // allows joins
->from($this)
->join('foo', 'foo.id = bar.foo_id');
return $this->fetchAll($select);
}
Если вы хотите придерживаться определения, вы можете использовать какой-то сервисный уровень или DataMapper , который знает, как обрабатывать несколько таблиц. Они находятся между классами Db и контроллерами.
Другой альтернативой является не использование объединений, а табличные отношения , а затем отложенная загрузка зависимых наборов строк при необходимости. Конечно, это не Joins, а несколько запросов.
И, наконец, вы все еще можете просто использовать Zend_Db_Statement и создавать свой SQL вручную :
$stmt = $db->query(
'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?',
array('goofy', 'FIXED'));