Php 分页在Laravel 4中不起作用
我试图在Laravel4中使用分页来处理相当复杂的查询(我想是使用Fluent查询生成器) 查询SQL代码Php 分页在Laravel 4中不起作用,php,mysql,pagination,laravel,laravel-4,Php,Mysql,Pagination,Laravel,Laravel 4,我试图在Laravel4中使用分页来处理相当复杂的查询(我想是使用Fluent查询生成器) 查询SQL代码 SELECT `description`, `email`, `website`, `telephone`, `purpose`, `services`, `eligibilitycriteria`, `meetingplace`, `servicecosts`, `area`, `servicetype`, `beneficiarytype`,
SELECT `description`, `email`, `website`, `telephone`, `purpose`, `services`,
`eligibilitycriteria`, `meetingplace`, `servicecosts`, `area`,
`servicetype`, `beneficiarytype`, `charitynumber`, `address`, `contacts`,
MATCH (
`name`,`description`,`email`,`website`,`telephone`,`purpose`,`services`,
`eligibilitycriteria`,`meetingplace`,`servicecosts`,`area`,`servicetype`,
`beneficiarytype`,`charitynumber`,`address`,`contacts`
)
AGAINST ("dan") AS Score0,
MATCH (`name`) AGAINST ("dan") AS Score1 FROM `directory_cache`
WHERE MATCH(
`description`,`email`,`website`,`telephone`,`purpose`,`services`,
`eligibilitycriteria`,`meetingplace`,`servicecosts`,`area`,`servicetype`,
`beneficiarytype`,`charitynumber`,`address`,`contacts`
)
AGAINST ("dan")
ORDER BY (Score0*1 + Score1*1.5) DESC
我在我的控制器中调用查询生成器末尾的分页,如下所示:
$results = $query->paginate(20);
然后在我看来,我只需调用$results->links
,就可以得到下一页的分页按钮和编号页等
但当我点击第2页时,这就是我遇到问题的地方
我的表单使用POST提交搜索表单。get和post操作都使用相同的视图文件来显示搜索表单和结果
请帮助,如果你需要更多的信息,我很乐意编辑这篇文章并添加进去,我整晚都在这里 您必须在会话中使用GET或store查询,我看不到更简单的方法。 不管怎么说,像你这样使用POST是不好的做法。您应该发布,然后从那里重定向,要么传递GET参数,要么将查询保持在会话中
function post_search() {
$query = DirectoryCache::where(...)->where(...);
Session::put('searchQuery', $query);
return Redirect::to_action('controller@viewResults');
}
function get_viewResults($page = 1) {
$perPage = 20;
$query = Session::get('searchQuery', DirectoryCache::where(1, '=', 1));
$query = $query->paginate();
$query->skip($page * $perPage)->take($perPage);
$results = $query->get();
...
}
我知道这是Laravel 3,我还没有接触到4,但API应该几乎相同。您必须在会话中使用获取或存储查询,我看不到更简单的方法。 不管怎么说,像你这样使用POST是不好的做法。您应该发布,然后从那里重定向,要么传递GET参数,要么将查询保持在会话中
function post_search() {
$query = DirectoryCache::where(...)->where(...);
Session::put('searchQuery', $query);
return Redirect::to_action('controller@viewResults');
}
function get_viewResults($page = 1) {
$perPage = 20;
$query = Session::get('searchQuery', DirectoryCache::where(1, '=', 1));
$query = $query->paginate();
$query->skip($page * $perPage)->take($perPage);
$results = $query->get();
...
}
我知道这是Laravel 3,我还没有接触到4,但API应该几乎相同。我的建议是使用
route::any()
将viewResults
和search
路由到相同的路由,这样您就需要为这两个操作执行不同的功能
routes.php
function viewResults(){
$searchQuery = Input::get('searchQuery');
if(isset($searchQuery))
$query = DirectoryCache::where(...)->where(...);
else
$query = DirectoryCache::where(1, '=', 1);
$results = $query->paginate();
//This will append the searchQuery to your pagination links
$results->appends(array('searchQuery'=>$searchQuery));
}
Route::any('/list','Controller@viewResults');代码>
Controller.php
function viewResults(){
$searchQuery = Input::get('searchQuery');
if(isset($searchQuery))
$query = DirectoryCache::where(...)->where(...);
else
$query = DirectoryCache::where(1, '=', 1);
$results = $query->paginate();
//This will append the searchQuery to your pagination links
$results->appends(array('searchQuery'=>$searchQuery));
}
因此,无论您执行POST
或GET
操作,您都将执行相同的操作,并且仍然能够执行搜索并获取结果。我希望这有帮助我的建议是使用route::any()
将查看结果
和搜索
路由到同一个路由,这样您就需要为这两个操作执行单独的功能
routes.php
function viewResults(){
$searchQuery = Input::get('searchQuery');
if(isset($searchQuery))
$query = DirectoryCache::where(...)->where(...);
else
$query = DirectoryCache::where(1, '=', 1);
$results = $query->paginate();
//This will append the searchQuery to your pagination links
$results->appends(array('searchQuery'=>$searchQuery));
}
Route::any('/list','Controller@viewResults');代码>
Controller.php
function viewResults(){
$searchQuery = Input::get('searchQuery');
if(isset($searchQuery))
$query = DirectoryCache::where(...)->where(...);
else
$query = DirectoryCache::where(1, '=', 1);
$results = $query->paginate();
//This will append the searchQuery to your pagination links
$results->appends(array('searchQuery'=>$searchQuery));
}
因此,无论您执行POST
或GET
操作,您都将执行相同的操作,并且仍然能够执行搜索并获取结果。我希望这对您编写的return Redirect::to_action('controller@viewResults');你的意思是controller@get_viewResults? 另外,正如你在回答中提到的,我将如何使用GET?我没有使用GET。我正在使用会话传递数据。使用GET时,您需要传递大量参数,因此在您的情况下可能是不切实际的。很抱歉让您感到困惑,这是RESTful控制器的语法,您可以在这里阅读。请记住,从3到4的命名约定有一些不同。您在其中编写了return Redirect::to_action('controller@viewResults');你的意思是controller@get_viewResults? 另外,正如你在回答中提到的,我将如何使用GET?我没有使用GET。我正在使用会话传递数据。使用GET时,您需要传递大量参数,因此在您的情况下可能是不切实际的。很抱歉让您感到困惑,这是RESTful控制器的语法,您可以在这里阅读。请记住,从3到4的命名约定存在一些差异。应选择此答案作为特色!这个答案应该被选为特色!