我正在尝试在 Laravel 4 中使用分页进行相当复杂的查询(我认为使用 Fluent 查询构建器)。
查询 SQL 代码
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
我在我的 Controller 中调用查询生成器末尾的分页,如下所示:
$results = $query->paginate(20);
然后在我看来,我只需调用 $results->links
就可以获得下一页和编号页面等的分页按钮。
但是当我点击第2页时,这就是我遇到问题的地方。
我的表单使用 POST 提交搜索表单。 get 和 post 操作都使用相同的 View 文件来显示搜索表单和结果。
请帮忙,如果您需要更多信息,我很乐意编辑帖子并将其添加进来,我整晚都在这里!
最佳答案
我的建议是使用 Route::any()
将 viewResults
和 search
路由到同一路由,这样您就需要为两个操作执行单独的功能
routes.php
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
,您都将执行相同的操作并且仍然能够执行搜索并获得结果。希望对您有所帮助
关于php - 分页在 Laravel 4 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18641747/