【问题标题】:Faced the error when wanted to create pagination in Laravel想要在 Laravel 中创建分页时遇到错误
【发布时间】:2019-02-15 15:17:31
【问题描述】:

我想在索引页面中创建分页,正如我在 Laravel 文档中阅读的那样,当我遇到错误时,可以使用带有 orderBy 方法的分页方法:“Method Illuminate\Database\Eloquent\Collection::orderBy 没有存在。”。我正在使用的代码:

public function index()
    {
        $user_id=auth()->user()->id;
        $user=User::find($user_id);
        $personal=$user->personalAccounting->orderBy('asc')->paginate(2);
        $balance=$user->balance;
        return view('personal.index', compact('personal','balance'));

    }  


 @extends('layouts.app')
    @section('content')
    <h1>Домашняя Бухгалтерия</h1>
    <br>
    @if($balance==0)
    <h2 class="text-center">Ваш Баланс: <span class="badge badge-primary">0.00</span></h2>
    @elseif($balance<0)
    <h3 class="text-center">Ваш Баланс: <span class="badge badge-danger">{{$balance}}</span></h3>
    @else
    <h3 class="text-center">Ваш Баланс: <span class="badge badge-success">+{{$balance}}</span></h3>
    @endif
    <br>
    <a href="/personal/create" class="btn btn-primary">Создать</a>
    <br>
    @if(count($personal)>0)
    @foreach($personal as $pers)
    <br>
        <div class="card">
            <h2><a href="/personal/{{$pers->id}}" >{{$pers->TypeOfAccounting}}</a></h2>
        <h5 class="">Наименование:<span class="badge">{{$pers->Name}}</span></h5>
        </div>
    @endforeach
    {{$personal->links()}}
    @else
    <p>Не найдено записей</p>


    @endif

    @stop

【问题讨论】:

    标签: php laravel


    【解决方案1】:
    public function index()
        {
            $user = auth()->user(); // It's already the user model
    
            $personal = $user->personalAccounting()->orderBy('YOUR_COLUMN')->paginate(2);
            $balance = $user->balance;
            return view('personal.index', compact('personal','balance'));
    
        }  
    

    注意 personalAccounting() 而不是 personalAccounting 原因是,当你调用 without () 的属性时,Laravel 会将你数据库中的所有数据加载到一个集合中。您之后所做的每一次修改都将使用 PHP 完成。
    当您使用 using () 方法请求时,您正在修改 QueryBuilder,这意味着 orderBy 和分页将由 MySQL 执行,这也将提高性能并减少内存使用。

    【讨论】:

    • 嘿老兄感谢您的酷解决方案和解释。:)
    【解决方案2】:

    asc

    之前给列名
    public function index()
        {
            $user_id=auth()->user()->id;
            $user=User::find($user_id);
            $personal=$user->personalAccounting->orderBy('**your_column_name**','asc')->paginate(2);
            $balance=$user->balance;
            return view('personal.index', compact('personal','balance'));
    
    } 
    

    【讨论】:

    • 嗨 Minar,我输入了列名,但收到了完全相同的错误:“Method Illuminate\Database\Eloquent\Collection::orderBy 不存在。”
    • @MayuriPansuriya,嗨 Mayuri,是的,试过了,但得到了未定义的属性:Illuminate\Database\Eloquent\Builder::$personalAccounting"
    • @MayuriPansuriya,我使用的代码 $user_id=auth()->user()->id; $user=User::where('id', $user_id); $personal=$user->personalAccounting->orderBy('id','asc')->paginate(2); $余额=$用户->余额; return view('personal.index', compact('personal','balance'));
    • @MayuriPansuriya,我已经更新了我的问题,请检查一下,对不起,我来自俄罗斯,因此该应用程序是俄语:)
    【解决方案3】:
    Try to use latest().
    
    public function index()
        {
            $user_id=auth()->user()->id;
            $user=User::find($user_id);
            $personal=$user->personalAccounting->latest('***Add column name***')->paginate(2);
            $balance=$user->balance;
            return view('personal.index', compact('personal','balance'));
    
        }  
    

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 2019-11-26
      • 2023-01-30
      • 2020-11-02
      • 2021-05-15
      • 1970-01-01
      • 2016-02-11
      • 2022-11-21
      • 1970-01-01
      相关资源
      最近更新 更多