【问题标题】:Best way to search in all columns in Phalcon ORM?在 Phalcon ORM 中搜索所有列的最佳方法?
【发布时间】:2016-04-07 13:36:42
【问题描述】:

我总是在 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 中快速实现?

【问题讨论】:

  • 嘿,没有这样的现成解决方案,因为 Phalcon 的目标是最高性能。但是社区有一个很好的解决方案:github.com/stanislav-web/Searcher 注意:我没有使用它,但查看了源文件,它看起来很有希望。这里还有一个很好的 Phalcon 好东西列表:github.com/sergeyklay/awesome-phalcon
  • @NikiMihaylov 你一起活跃在 Stackowerflow 和 phalcon 论坛中:)
  • 传播 Phalcon 的爱。更多人应该知道这个很棒的框架:)
  • 是的! php 是我的生命,现在 phalcon 是我的爱,我也会将 Phalcon Docs 翻译成我的语言:)

标签: php orm phalcon


【解决方案1】:

正如@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。更好的解决方案可能是定义一个包含您想要搜索的所有列的自定义数组。从而限制可搜索列的数量并可能提高性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多