I think the call to paginate() needs to go OUTSIDE of the closure, otherwise you're only paginating that inner query.
Jul 16, 2016
6
Level 1
Strange ->paginate(5) of relation // 1st Page = results 2nd Page no Results but SQL gets Results
Hello,
i have a strange behavior with a pagination. The first call of the method gets me results. If i increment the page i dont get any results.
Short the Structure: Group -> Kategorie -> Item
If i run the build SQL's on the Database i get results.
Build SQL first Page:
select `itemidees`.*, `itemidee_groups_to_itemidees`.`itemidee_kategorie_id` as `pivot_itemidee_kategorie_id`, `itemidee_groups_to_itemidees`.`itemidee_id` as `pivot_itemidee_id` from `itemidees` inner join `itemidee_groups_to_itemidees` on `itemidees`.`id` = `itemidee_groups_to_itemidees`.`itemidee_id` where `itemidee_groups_to_itemidees`.`itemidee_kategorie_id` in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10') limit 5 offset 0
mysql> select `itemidees`.id, `itemidee_groups_to_itemidees`.`itemidee_kategorie_id` as `pivot_itemidee_kategorie_id`, `itemidee_groups_to_itemidees`.`pivot_itemidee_id` from `itemidees` inner join `itemidee_groups_to_itemidees` on `itemidees`.`id` = `itemidee_groups_to_itemidees`.`itemidee_id` where `g
ups_to_itemidees`.`itemidee_kategorie_id` in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10') limit 5 offset 0;
+----+---------------------------------+-----------------------+
| id | pivot_itemidee_kategorie_id | pivot_itemidee_id |
+----+---------------------------------+-----------------------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 1 | 4 |
| 5 | 1 | 5 |
+----+---------------------------------+-----------------------+
5 rows in set (0.00 sec)
Now the build SQL with Page 2:
select `itemidees`.*, `itemidee_groups_to_itemidees`.`itemidee_kategorie_id` as `pivot_itemidee_kategorie_id`, `itemidee_groups_to_itemidees`.`itemidee_id` as `pivot_itemidee_id` from `itemidees` inner join `itemidee_groups_to_itemidees` on `itemidees`.`id` = `itemidee_groups_to_itemidees`.`itemidee_id` where `itemidee_groups_to_itemidees`.`itemidee_kategorie_id` in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10') limit 5 offset 5
mysql> select `itemidees`.id, `itemidee_groups_to_itemidees`.`itemidee_kategorie_id` as `pivot_itemidee_kategorie_id`, `itemidee_groups_to_itemidees`.`pivot_itemidee_id` from `itemidees` inner join `itemidee_groups_to_itemidees` on `itemidees`.`id` = `itemidee_groups_to_itemidees`.`itemidee_id` where `g
ups_to_itemidees`.`itemidee_kategorie_id` in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10') limit 5 offset 5;
+----+---------------------------------+-----------------------+
| id | pivot_itemidee_kategorie_id | pivot_itemidee_id |
+----+---------------------------------+-----------------------+
| 6 | 2 | 6 |
| 7 | 2 | 7 |
| 8 | 3 | 8 |
| 9 | 3 | 9 |
| 10 | 3 | 10 |
+----+---------------------------------+-----------------------+
5 rows in set (0.00 sec)
If i dd($itemcats) and navigate to the relation, i get an empty collection.
Here I have the Code:
public function ajax_filterByCats($catsIdArr = [1,2,3,4,5,6,7,8,9,10], $output = 'html')
{
$retcollection = \Illuminate\Database\Eloquent\Collection::make();
$randomretcollection = \Illuminate\Database\Eloquent\Collection::make();
$itemcats = \App\ItemideeKategorie::whereIn('id' ,$catsIdArr)
->with(['itemideen' => function($query) {
// return $query->paginate(5);
$page = (int) $_REQUEST['page'];
return $query->limit(5)->offset(5*$page);
}])->get();
foreach ($itemcats as $itemcat) {
foreach ($itemcat->itemideen as $item)
{
$retcollection->push($item);
}
}
if($output == 'html')
return view('itemideen._itemidee_list')->with(['itemideen' => $randomretcollection]);
return $retcollection;
/*
foreach ($retcollection as $rc)
{
$randomretcollection->push($retcollection->random());
}
*/
}
Please or to participate in this conversation.