我总是在mysql:中使用以下代码
SELECT * FROM myobject
WHERE MATCH(`name`, `foo`, `bar`) AGAINST ('$search') IN BOOLEAN MODE
在Phalcon ORM:
myobject::find([
"columns” => "id, name”,
"conditions" => "name LIKE ?1 OR foo LIKE ?1 OR bar LIKE ?1 ",
"bind" => [1 =>$search]
]);
如何查找所有列?
这在Phalcon ORM中可以快速实现吗?
@niki_mihaylov如上所述,Phalcon中没有现成的解决方案。但是,您可以获取模型的所有列,并为每列添加一个where
子句。
根据表的列数和搜索的内容,性能可能会下降。
[控制器]
$result = myobject::searchColumns($search);
【型号】
public static function searchColumns($search)
{
$query = self::query();
foreach (self::columnMap() as $column) {
$query->orWhere($column . ' LIKE :search:');
}
$query->bind(['search' => '%' . $search . '%']);
return $query->execute();
}
self::columnMap()
是指您的模型中定义的columnMap
。更好的解决方案可能是定义一个自定义数组,其中包含要搜索的所有列。从而限制可搜索列的数量,并可能提高性能。