Laravel,如何对循环数组进行排序和分页

我在控制器中有这段代码,所以我需要使用距离进行分页和排序,我不知道该怎么做,我是 laravel 的新手,提前致谢


$stores = [];

foreach (session('storeinfo') as $storeInfo) {

$store = Storeinfo::find($storeInfo['id']);

if ($store) {

    $store->distance = $storeInfo['distance'];

    $stores[] = $store;


 $stores = collect([]);


 if (!Collection::hasMacro('paginate')) {

Collection::macro('paginate', function ($perPage = 25, $page = null, $options = []) {

    $options['path'] = $options['path'] ?? request()->path();

    $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);

    return new LengthAwarePaginator(

        $this->forPage($page, $perPage)->values(),

        $this->count(),

        $perPage,

        $page,

        $options

    );

    });   

   }

  }

 }


return view('stores.archive',compact('stores'));

我使用这个将 id 放入会话中:


 $allstores= Storeinfo::all();

foreach ($allstores as $allstore) {

Session::push('storeinfo', [

'id' => $allstore->id,

'distance' => $miles

]);  


}}

$mile 来自计算距离的地方在此处输入代码


吃鸡游戏
浏览 280回答 1
1回答

12345678_0001

首先,我会创建一个$stores数组的集合实例:$stores = collect([]);我更喜欢使用push()集合的api 添加项目:$stores->push($store);其次,集合实例不提供本机分页方式,因此您需要添加一个宏:use Illuminate\Support\Collection;use Illuminate\Pagination\Paginator; use Illuminate\Pagination\LengthAwarePaginator;...if (!Collection::hasMacro('paginate')) {    Collection::macro('paginate', function ($perPage = 25, $page = null, $options = []) {        $options['path'] = $options['path'] ?? request()->path();        $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);        return new LengthAwarePaginator(            $this->forPage($page, $perPage)->values(),            $this->count(),            $perPage,            $page,            $options        );    });}我个人添加了上面的宏,AppServiceProvider以便我可以在我的项目中的任何地方使用它。这应该位于app/Providers目录中。要分页,您只需调用paginate()您刚刚创建的宏:$stores->paginate(15);如果你想设置当前页面或路径,你可以这样做:$stores->paginate(15, 1, ['path' => 'your/custom/path']);要排序,您需要做的就是使用所需的sortBy方法来实现您的结果。根据文档,sortBy需要一个字符串:$sorted = $collection->sortBy('price');或者回调:$sorted = $collection->sortBy(function ($product, $key) {    return count($product['colors']);});该方法的sortByDesc()工作方式与sortBy().
打开App,查看更多内容
随时随地看视频慕课网APP