Столкнулся с ошибкой, когда хотел создать нумерацию страниц в Laravel - PullRequest
0 голосов
/ 11 сентября 2018

Я хотел создать нумерацию страниц на индексной странице, и, как я читал в документации Laravel, можно использовать метод paginate с методом orderBy, когда я сталкиваюсь с ошибкой: «Метод 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

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018
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'));

    }  
0 голосов
/ 11 сентября 2018
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 Причина в том, что когда вы вызываете атрибут без (), Laravel загрузит все данные из вашей БД в коллекцию.Каждая последующая модификация будет выполняться с помощью PHP.
Когда вы запрашиваете метод , используя (), вы модифицируете QueryBuilder, что означает, что orderBy и разбиение на страницы будут выполняться MySQL.что также увеличит производительность и уменьшит использование памяти.

0 голосов
/ 11 сентября 2018

Укажите имя столбца перед 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'));

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...