加入Zend Framework中的zend_db_table_abstract类

时间:2012-07-02 18:35:50

标签: zend-framework zend-db-table

我有一个模块,有两个扩展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中重现了这个问题。

2 个答案:

答案 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');