【问题标题】:Join with zend_db_table_abstract classes in Zend Framework在 Zend 框架中加入 zend_db_table_abstract 类
【发布时间】:2012-07-02 18:35:50
【问题描述】:

我有一个包含两个扩展 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 中重现该问题时遇到问题。

【问题讨论】:

    标签: zend-framework zend-db-table


    【解决方案1】:

    您的 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`'));
    

    【讨论】:

    • 所以我的参数搞混了?我真的很感激帮助。因为我可以将模型作为对象传递,所以无论如何要将这些对象用作 ON 子句还是总是需要输入(例如,如果由于某种原因我重命名表)。
    • 虽然这没有按预期工作。我想计算匹配 parent_id 到子表 id 的子表的返回 id。
    【解决方案2】:

    据我所知,将对象传递给 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');
    

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多