我有一个模块,有两个扩展Zend_Db_Table_Abstract的模型:
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');
我错过了什么?我只是无法绕过Zend加入,我想我最终会写直接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');
适合我的sql:
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 :(得分:0)
你加入()似乎有问题。第二个参数应该是连接的ON子句,您不再需要where():
$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`'));
答案 1 :(得分:0)
据我所知,将对象传递给table参数并不能提供预期的结果,并且总是会产生错误。即使像$ 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');