我有一个Laravel PHP应用程序,允许用户从下拉框中选择一个类别,在用户进行选择后,应用程序然后通过表单提交检索结果所选类别。我目前正在将结果数量分页到每页10个。检索结果后,会显示2个总计
1)所有类别的结果总数。
2)所选类别的结果数量。
提交表单后,上述总计会正确显示,但仅适用于第一页结果。查看其他结果页面时会出现此问题,例如,如果 15条总记录且类别1 ,则下拉框中包含 12条记录,当用户选择此类别然后提交表单时,将显示以下输出:
Page 1
总记录:15
分类结果:12
现在使用Laravel分页链接时,使用
{{ $allpics->appends(array('category' => $category))->links()}}
如果用户导航到第2页,则会显示以下输出:
Page 2
总记录:15
分类结果:0
我已尝试过多种方法来解决此问题,方法是使用' $ _ GET [] '命令用' $ _ SERVER [' QUERY_STRING'] '确定是否' 页面'和' 类别'导航到其他结果页面时会附加变量,以便可以根据URL本身中选定的类别再次查询类别结果的数量。导航到其他结果页面时,我仍然无法将类别结果的数量保持在正确的数字。
控制器:
public function index()
{
$vdo = Video::query();
$pic = Picture::query();
if($category = Input::get('category')){
$vdo->where('category', $category);
$pic->where('category', $category);
/* Old code */
// $urlcategory = $_GET['category'];
$urlcategory = $_SERVER['QUERY_STRING'];
$url_cat_page = parse_str($urlcategory);
$url_page = $category;
$totalCatVids = $vdo->where('category', $category);
$totalCatPics = $pic->where('category', $category);
$allvids = $vdo->paginate(10);
$allpics = $pic->paginate(10);
$totalVideos = Video::all();
$totalPictures = Picture::all();
$data = compact('allvids','allpics', 'totalCatVids', 'totalCatPics', 'totalVideos', 'totalPictures', 'url_page');
$data['category'] = Input::get('category');
$this->layout->content = \View::make('home.picsvids.pics_vids_overview', $data);
}
else if (isset($_GET['category']) && $_GET['category'] == $category)
{
$vdo->where('category', $category);
$pic->where('category', $category);
$totalCatVids = $vdo->where('category', $category);
$totalCatPics = $pic->where('category', $category);
$allvids = $vdo->paginate(10);
$allpics = $pic->paginate(10);
$totalVideos = Video::all();
$totalPictures = Picture::all();
$data = compact('allvids','allpics', 'totalCatVids', 'totalCatPics', 'totalVideos', 'totalPictures', 'url_page');
$data['category'] = Input::get('category');
$this->layout->content = \View::make('home.picsvids.pics_vids_overview', $data);
}
else
{
$urlcategory = '';
$url_page = $category;
$totalCatVids = Video::all();
$totalCatPics = Picture::all();
$allvids = $vdo->paginate(10);
$allpics = $pic->paginate(10);
$totalVideos = Video::all();
$totalPictures = Picture::all();
$data = compact('allvids','allpics', 'totalCatVids', 'totalCatPics', 'totalVideos', 'totalPictures', 'url_page');
$data['category'] = Input::get('category');
$this->layout->content = \View::make('home.picsvids.pics_vids_overview', $data);
}
}
我一直在尝试找到解决此问题的方法一段时间,而且我不确定为什么类别总数会更改为' 0' 以用于其他页面分页而不是保留在正确的类别编号,在这种情况下' 12' ,即使在创建基于附加所选类别名称的URL的条件之后也是如此。非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
你的代码中有很多重复,这样的事情可能更容易理解,应该解决类别问题。但是不能测试它,obvs
public function index()
{
$totalVideos = Video::count();
$totalPictures = Picture::count();
$vdo = Video::query();
$pic = Picture::query();
if ($category = Input::get('category')) {
$vdo->where('category', $category);
$pic->where('category', $category);
$totalCatPics = Picture::where('category', $category)->count();
$totalCatVids = Video::where('category', $category)->count();
} else {
$totalCatPics = $totalPictures;
$totalCatVids = $totalVideos;
}
$allvids = $vdo->paginate(10);
$allpics = $pic->paginate(10);
$data = compact('allvids','allpics', 'totalCatVids', 'totalCatPics', 'totalVideos', 'totalPictures', 'url_page');
$data['category'] = $category;
$this->layout->content = \View::make('home.picsvids.pics_vids_overview', $data);
}
答案 1 :(得分:0)
通过使用@ chepe263提供的解决方案,我修改了我的控制器并查看了所以现在当通过分页导航到其他结果页时,类别总数不再重置为0。
<强>控制器:强>
$totalCatPics = $pic->where('category', $category);
$_SESSION['totalcatpics'] = $totalCatPics->count();
查看:强>
<b>Category Results: {{ $_SESSION['totalcatpics'] }}</b><br>
希望这个解决方案可以帮助遇到类似问题的其他人!