在Phalcon ORM中搜索所有列的最佳方式


Best way to search in all columns in Phalcon ORM?

我总是在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。更好的解决方案可能是定义一个自定义数组,其中包含要搜索的所有列。从而限制可搜索列的数量,并可能提高性能。