我需要像在 ZF2 框架应用程序中一样使用 tableGateway 在 ZF2 应用程序中执行 [MATCH (title, description) AGAINST ('text')]。
尝试使用 \Zend\Db\Sql\Where 时,我寄予厚望,但找不到任何方法。关于如何做到这一点的任何建议或例子?
我需要像在 ZF2 框架应用程序中一样使用 tableGateway 在 ZF2 应用程序中执行 [MATCH (title, description) AGAINST ('text')]。
尝试使用 \Zend\Db\Sql\Where 时,我寄予厚望,但找不到任何方法。关于如何做到这一点的任何建议或例子?
我对 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());
我也没有找到任何使用 MATCH AGAINST 的方法,所以我想你可以使用 LIKE 代替:
$rowset = $someTable->select(function (Select $select) {
$select->where->like('CONCAT(title, description)', '%text%');
});
似乎没有办法使用 tableGateway 进行 MATCH AGAINST。唯一的解决方案是使用“默认”方式使用 \Zend\Db\Adapter\Adapter -> query($qry)
这个怎么样?
$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)
这对我有用。
$select->where("MATCH(title, description) AGAINST ('{$text}' IN NATURAL LANGUAGE MODE)");
您应该使用 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);