在CakePHP中搜索搜索结果

Axi*_*iol 5 pagination cakephp

我在CakePHP项目上设置了一个简单的搜索引擎,看起来像这样:

<?php 
    echo $this->Form->create("Post", array(
        "action" => "search", 
        "id" => "searchForm"
    ));
    echo $this->Form->input("keyword", array(
        "label" => "",
        "type" => "search",
        "placeholder" => "Recherche..."
    ));
    echo $this->Form->end(); 
?>
Run Code Online (Sandbox Code Playgroud)

这是控制器:

function search() {
    $keyword = $this->request->data;
    $keyword = $keyword["Post"]["keyword"];
    $cond = array("OR" => array(
        "Post.title LIKE '%$keyword%'",
        "Post.description LIKE '%$keyword%'"
    ));
    $posts = $this->Post->find("all", array("conditions" => $cond));
    $this->set(compact("posts", "keyword"));
}
Run Code Online (Sandbox Code Playgroud)

而且效果很好.唯一的问题是我想要对结果进行分页.我只是添加:

$posts = $this->paginate();
Run Code Online (Sandbox Code Playgroud)

这就是问题所在.当我添加它时,CakePHP会给我所有帖子,而不仅仅是那些与关键字匹配的帖子.

所以,如果你有一个解决方案,那就太好了:)

Eoi*_*phy 13

根据CakePHP的书,你应该可以做到

$this->paginate('Post', array(
    'OR' => array(
        'Post.title LIKE' => "%$keyword%",
        'Post.description LIKE' => "%$keyword%"
    )

));
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做(来自cakephp网站).

public function list_recipes() {
    $this->paginate = array(
        'conditions' => array('Recipe.title LIKE' => 'a%'),
        'limit' => 10
    );
    $data = $this->paginate('Recipe');
    $this->set(compact('data'));
);
Run Code Online (Sandbox Code Playgroud)

资料来源:http: //book.cakephp.org/2.0/en/core-libraries/components/pagination.html