2012-07-02 1 views
0

У меня есть модуль с двумя моделями, которые расширяют Zend_Db_Table_Abstract:Регистрация с Zend_Db_Table_Abstract классов в Zend Framework

class Departments_Model_Subpages extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'bktg_departments_subpages'; 
    protected $_primary = 'id'; 
} 

class Departments_Model_Departments extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'bktg_departments'; 
    protected $_primary = 'id'; 
} 

Чтение через документацию, что я хочу сделать что-то вроде этого (очевидно, неправильно):

$depTable = new Departments_Model_Departments(); 
$subTable = new Departments_Model_Subpages(); 

$depQuery = $depTable->select()->setIntegrityCheck(false) 
->from($depTable, array('id', 'title')) 
->join($subTable, array('COUNT(id) as `count`')) 
->where('bktg_departments.id = bktg_departments_subpages.parent_id'); 

Что мне не хватает? Я просто не могу обернуть голову вокруг присоединений Зенда, и я думаю, что собираюсь закончить писать прямо sql.

Спасибо, что посмотрели.

Редактировать

Вот что я работаю с компанией:

$depQuery = $depTable->select()->setIntegrityCheck(false) 
->from($depTable, array('id', 'title')) 
->joinLeft($subTable, 'bktg_departments.id = bktg_departments_subpages.parent_id',  array('COUNT(id) as count')) 
->order('id DESC') 
->group('id'); 

СКП, который работает для меня:

SELECT bktg_departments.id, bktg_departments.title, count(bktg_departments_subpages.id) FROM bktg_departments left join bktg_departments_subpages on bktg_departments.id = bktg_departments_subpages.parent_id group by bktg_departments.id 

И у меня возникли проблемы, воспроизводящих, что в Zend.

ответ

0

Насколько я могу судить, передавая объект в параметр таблицы не дает вам ожидаемые результаты, и всегда генерирует ошибку. Даже такой метод, как $ table-> getName(), генерирует ошибки, поэтому мне пришлось вручную вводить имя. Я не знаю, ожидал ли я большего от выбранного объекта, тогда он способен, или это ошибка в 1.11. В любом случае, я надеюсь, что это поможет кому-то с их разочарованиями.

Следующий код работает:

$depQuery = $depTable->select()->setIntegrityCheck(false) 
->from($depTable, array('id', 'title')) 
->joinLeft('bktg_departments_subpages', 'bktg_departments.id = bktg_departments_subpages.parent_id', array('count' => 'COUNT(bktg_departments_subpages.id)')) 
->group('bktg_departments.id') 
->order('bktg_departments.id DESC'); 
0

Кажется, проблема связана с вами join(). Второй параметр должен быть пункт о джойна, и вы не будете нуждаться в где() больше:

$depQuery = $depTable->select()->setIntegrityCheck(false) 
->from($depTable, array('id', 'title')) 
->join($subTable, 'bktg_departments.id = bktg_departments_subpages.parent_id', array('COUNT(id) as `count`')); 
+0

Так я мои параметры перепутали? Я очень ценю помощь. Поскольку я могу передавать модели в виде объектов, все равно использовать эти объекты в качестве предложения ON или всегда нужно их печатать (например, если по какой-то причине я переименую таблицу). – dbergunder

+0

Хотя это не работает должным образом. Я хочу подсчитать возвращенный идентификатор subTable, который сопоставляет parent_id с id subTable. – dbergunder