我有一个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);
}
分页正在以某种方式起作用,但搜索不是,为什么?
答案 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'
));