代码之家  ›  专栏  ›  技术社区  ›  Wouter Dorgelo voy

zend_db_select:使用join

  •  2
  • Wouter Dorgelo voy  · 技术社区  · 14 年前

    我有这个问题:

    SELECT
        groups.name
        categories.name,
        categories.label
    FROM
        groups
    JOIN
        categories
    ON
        (categories.group1 = groups.id
    OR
        categories.group2 = groups.id)
    AND
        groups.label = :section
    AND
        categories.active = 1
    

    现在,这是我使用zend_db_select进行的连接,但它给了我数组错误。

    $select->from($dao, array('groups.name', 'categories.name', 'categories.label'))
           ->join(array('categories', 'categories.group1 = groups.id OR categories.group2 = groups.id'))
           ->where('groups.label = ?', $group)
           ->where('categories.active = 1');
    

    我的错误:

    异常信息:

    消息:select查询无法与联接 另一张桌子

    有人知道我做错了什么吗?

    更新/解决方案:

    我找到了解决办法。我只是在这里张贴解决方案,以防其他人陷入这样的问题。解决方案是:

    $db = Zend_Registry::get('db');
    $dao = new Default_Model_Db_CategoryDao('db');
    $select = $dao->select();
    
    $select->setIntegrityCheck(false)
           ->from(array('c' => 'categories'), array('name', 'label'))
           ->join(array('g' => 'groups'), 'c.group1 = g.id OR c.group2 = g.id', 'g.label')
           ->where('g.label = ?', $group)
           ->where('c.active = 1');
    
    return $dao->fetchAll($select);
    
    1 回复  |  直到 12 年前
        1
  •  4
  •   Eran Galperin    14 年前

    您使用的是zend_db_table_select对象。默认情况下,启用了完整性检查,无法选择表外的数据。

    您可以通过在使用select对象进行查询之前向其添加->setIntegrityCheck(false)来关闭它。

    你可以多读一些 in the manual 在“选择API->高级用法”下