Phalcon:find()+ Paginator

时间:2014-11-11 08:14:09

标签: pagination phalcon paginator

我有一个MySQL数据库和一个表。任务是设置一个方法,它将接收2个参数(?user_id = ...& action_id ...)并搜索匹配这两个字段或其中一个字段的记录,如果只设置了一个(?user_id =。 ..),然后将它们分页并将它们发送到动作视图。我一周前刚刚开始学习Phalcon,在这里和那里做过一些研究,阅读文档但仍然没有意识到我能做到这一点。   到目前为止我做了什么:

public function searchAction()
{

    $userID = $this->request->get("user_id", "int", 0);
    $actionID = $this->request->get("action_id", "int", 0);

    $currentPage = 1;
    $currentPage = (int) $_GET["page"];
    $parameters = array(
                'user_id' => $userID,
                'action_id' => $actionID
            );

            $o = History::find($parameters);

            $paginator = new Paginator(array(
                "data" => $o,
                "limit" => 10,
                "page" => $currentPage
            ));
            $page = $paginator->getPaginate();

            $this->view->setVar("page", $page);

}

分页正在以某种方式起作用,但搜索不是,为什么?

2 个答案:

答案 0 :(得分:0)

参考官方文件http://docs.phalconphp.com/en/latest/reference/models.html#binding-parameters

$conditions = "user_id = ?1 AND action_id = ?2";
$parameters = array(1 => userID, 2 => $actionID);
$o = History::find(array(
    $conditions,
    "bind" => $parameters
));

参数数组的索引必须与条件字符串中的占位符数匹配。

答案 1 :(得分:0)

方法find()或findFirst()中的第一个参数必须是一个字符串,用于为查询设置条件。

在您的情况下,您可以这样搜索:

$o = History::find('user_id = "'.$userID.'" AND action_id = "'.$action_id.'"');

但是,如果你想添加更多参数,那么你需要传递数组,第一个元素必须包含搜索条件:

$o = History::find(array(
   'user_id = "'.$userID.'" AND action_id = "'.$action_id.'"',
   'limit' => 10,
   'order' => 'user_id ASC'
));