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への私の最初の貢献。
ZF2TableGatewayでは次のように実行できます。
$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でMATCHAGAINSTを実行する方法はないようです。唯一の解決策は、\ 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($ 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);