2

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

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

4

6 回答 6

4

我对 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());
于 2013-02-01T13:46:16.437 回答
2

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

$rowset = $someTable->select(function (Select $select) {
     $select->where->like('CONCAT(title, description)', '%text%');
});
于 2012-12-07T06:11:14.487 回答
1

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

于 2012-12-07T09:50:44.970 回答
1

这个怎么样?

$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)
于 2014-01-20T09:20:24.627 回答
1

这对我有用。

$select->where("MATCH(title, description) AGAINST ('{$text}' IN NATURAL LANGUAGE MODE)");
于 2021-11-22T22:59:32.343 回答
0

您应该使用 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);
于 2017-11-30T15:33:08.750 回答