【问题标题】:left join in zend framework在zend框架中左加入
【发布时间】:2011-12-21 12:13:43
【问题描述】:

我是 ZF 的新手,我想加入 country.id=firm_dtl.firm_country 上名为 country 的表

$firmobj->fetchAll($firmobj->select($this)->where("firm_name like '$alpha%'")->order('firm_name'));

我该怎么做。 我正在尝试使用此代码:-

$firmobj->select($this)->joinLeft(array("c"=>"country"), "c.id = firm_dtl.firm_country","c.name")->where("firm_name like '$alpha%'")->order('firm_name');

【问题讨论】:

    标签: zend-framework zend-db zend-db-table


    【解决方案1】:

    您可以尝试以下一些方法来使左连接正常工作并提高安全性。

    我通常跨多行构建我的选择语句,因此我喜欢将它放在一个变量中。为了调试,我只是将不需要的行注释掉。

    $select = $firmobj->select()->from('country');
    

    您需要setIntegrityCheck(false),因为您可能不会更改和提交查询结果。这是 ZF 文档中关于它的引用。

    Zend_Db_Table_Select 主要用于约束和验证 以便它可以强制执行合法 SELECT 查询的条件。然而 在某些情况下,您可能需要灵活性 Zend_Db_Table_Row 组件,不需要可写或可删除 排。对于这个特定的用户案例,可以检索一行或 通过将 FALSE 值传递给 setIntegrityCheck() 来设置行集。

    $select->setIntegrityCheck(false);
    

    这是您加入的地方。您可以将 field1、field2、fieldn 替换为您希望在结果中看到的firm_dtl 表中的字段。

    $select->joinLeft(array('c' => 'country'), 'c.id = firm_dtl.firm_country', array('field1', 'field2', 'fieldn'));
    

    使用参数替换来避免 SQL 注入攻击。

    $select->where('firm_name LIKE ?', "$alpha%");
    

    最后对结果进行排序并获取行集。

    $select->order('firm_name');
    $rowSet = $firmobj->fetchAll($select);
    

    【讨论】:

      【解决方案2】:

      joinLeft 函数的第三个参数应该是您要获取的列数组。

      $firmobj->select($this)
              ->joinLeft(array("c"=>"country"), "c.id = firm_dtl.firm_country", array("c.name"))
              ->where("firm_name like '$alpha%'")
              ->order('firm_name');
      

      另外,更好的方法是这样使用 where 函数:

      ->where("firm_name like ?", $alpha . "%")
      

      这种方式比较安全。

      【讨论】:

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