0

我有一个带有两个扩展 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 中复制它时遇到了问题。

4

2 回答 2

0

您的 join() 似乎有问题。第二个参数应该是连接的 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`'));
于 2012-07-02T19:15:54.893 回答
0

据我所知,将对象传递给 table 参数不会给您预期的结果,并且总是会产生错误。甚至像 $table->getName() 这样的方法也会产生错误,所以我不得不手动输入名称。我不知道我是否期望 select 对象有更多的能力,或者这是 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');
于 2012-07-05T13:57:24.623 回答