2016-04-07 67 views
1

總是我在mysql中使用下面的代碼:在Phalcon ORM的所有欄目中搜索的最佳方法?

SELECT * FROM myobject 
WHERE MATCH(`name`, `foo`, `bar`) AGAINST ('$search') IN BOOLEAN MODE 

在爾康ORM:

myobject::find([ 
      "columns」 => "id, name」, 
      "conditions" => "name LIKE ?1 OR foo LIKE ?1 OR bar LIKE ?1 ", 
      "bind"  => [1 =>$search] 
      ]); 

如何通過所有列找到?

Phalcon ORM在快速的方式中可能嗎?

+1

嘿,沒有這樣的就緒解決方案,因爲Phalcon旨在獲得最佳性能。然而,社區提供了一個很好的解決方案:https://github.com/stanislav-web/Searcher注意:我沒有使用它,但通過源文件查看,它看起來很有前途。此外,這裏是一個很好的列表Phalcon好吃的東西:https://github.com/sergeyklay/awesome-phalcon –

+0

@NikiMihaylov你是活躍在Stackowerflow和phalcon論壇一起:) –

+1

傳播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。一個更好的解決方案可能是定義一個自定義數組,幷包含您想要搜索的所有列。由此限制可搜索列的數量並可能提高性能。

相關問題