【问题标题】:How to do a MATCH AGAINST with tableGateway in Zend Framework 2?如何在 Zend Framework 2 中使用 tableGateway 进行 MATCH AGAINST?
【发布时间】:2012-11-24 16:40:15
【问题描述】:

我需要像在 ZF2 框架应用程序中一样使用 tableGateway 在 ZF2 应用程序中执行 [MATCH (title, description) AGAINST ('text')]。

在尝试使用 \Zend\Db\Sql\Where 时,我寄予厚望,但找不到任何方法。关于如何做到这一点的任何建议或示例?

【问题讨论】:

    标签: php zend-framework2


    【解决方案1】:

    我对 stackoverflow 的第一个贡献。

    你可以在 ZF2 TableGateway 中这样做:

    $rowSet = $this->someTableGateway->select(function (Select $select) {
          $select->columns(array(new \Zend\Db\Sql\Expression("MATCH(column) AGAINST('Query') AS score")))
                 ->where("MATCH(column) AGAINST('\"Query\"' in boolean mode)")
                 ->order('score DESC');
        });
    
    var_dump($rowSet->toArray());
    

    【讨论】:

      【解决方案2】:

      我也没有找到任何使用 MATCH AGAINST 的方法,所以我想你可以使用 LIKE 代替:

      $rowset = $someTable->select(function (Select $select) {
           $select->where->like('CONCAT(title, description)', '%text%');
      });
      

      【讨论】:

        【解决方案3】:

        似乎没有办法使用 tableGateway 进行 MATCH AGAINST。唯一的解决方案是使用“默认”方式使用 \Zend\Db\Adapter\Adapter -> query($qry)

        【讨论】:

          【解决方案4】:

          这个怎么样?

          $db->select()->from('your_table')
              ->where('MATCH (`title, description`) AGAINST (?)', $text)
          

          它也可以在布尔模式下工作:

          $db->select()->from('your_table')
              ->where('MATCH (`title, description`) AGAINST (? IN BOOLEAN MODE)', $text)
          

          【讨论】:

            【解决方案5】:

            这对我有用。

            $select->where("MATCH(title, description) AGAINST ('{$text}' IN NATURAL LANGUAGE MODE)");
            

            【讨论】:

              【解决方案6】:

              您应该使用 Zend\Db\Sql\Where (Predicate/PredicateSet) API 中的表达式($expression, $parameters)。

              https://framework.zend.com/manual/2.2/en/modules/zend.db.sql.html#expression-expression-parameter

              例如:

                $select->where->expression(" MATCH(title, description) AGAINST( ? ))", $text);
              

              【讨论】:

                猜你喜欢
                • 2013-05-28
                • 2014-11-14
                • 1970-01-01
                • 2014-06-08
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多