Laravel分页与行数

时间:2019-07-16 06:52:00

标签: laravel pagination

如何在表格中添加每行的行号?我使用了分页,但是发现很难显示行数。在第2页中,应该以6开始,因为我的分页为每页5。

编辑

还有如何在表格上方正确显示单词showing 1 to 5 of 2095

enter image description here

CONTROLLER

class SchoolController extends Controller
{
    function index()
    {
        $q = Input::get('q');
        if ($q != "") {
            $schools = LibSchool::where('school_name', 'LIKE', '%' . $q . '%')
                ->orWhere('school_id', 'LIKE', '%' . $q . '%')
                ->orWhere('address', 'LIKE', '%' . $q . '%')
                ->orWhere('school_head', 'LIKE', '%' . $q . '%')
                ->orWhere('level', 'LIKE', '%' . $q . '%')
                ->orderBy('school_name', 'asc')
                ->with('libdistrict')
                ->with('libdistrict.libdivision')
                ->paginate(5)->appends('q', $q);
        } else {
            $schools = LibSchool::with('libdistrict')
                ->orderBy('school_name', 'asc')
                ->with('libdistrict.libdivision')
                ->paginate(5);
        }
        return view('schools.index')->with('data', ['schools' => $schools, 'q' => $q]);
    }
}

查看

<div class="card-body">
        Showing 1 to 15 of {{$data['schools']->total()}}
        <table class="table table-hover table-bordered table-striped">
            <tr>
                <th>#</th>
                <th>Division</th>
                <th>District</th>
                <th>School ID</th>
                <th>School NAME</th>
                <th>Address</th>
                <th>School Head</th>
                <th>Level</th>

            </tr>
            @if($data['schools']->total() > 0)
            @foreach($data['schools'] as $school)
            <tr>
                <td></td>
                <td>{{ $school->libdistrict ? $school->libdistrict->libdivision->div_name : 'N/A' }}</td>
                <td>{{ $school->libdistrict ? $school->libdistrict->district_name : 'N/A' }}</td>
                <td>{{$school->school_id}}</td>
                <td>{{$school->school_name}}</td>
                <td>{{$school->address}}</td>
                <td>{{$school->school_head}}</td>
                <td>{{$school->level}}</td>

            </tr>
            @endforeach
            @else
            <td colspan="7" class="text-danger">No records</td>
            @endif
        </table>
        {{$data['schools']->links()}}
    </div>

5 个答案:

答案 0 :(得分:1)

尝试这个

<td>{{ ($data['schools']->currentPage()-1) * $data['schools']->perPage() + $loop->index + 1 }}</td>

当前页面提供页码,$ loop变量提供循环中当前项目的索引,以便您计算编号。

您可以像这样在2095年的1至5中显示:

Showing {{($data['schools']->currentPage()-1)* $data['schools']->perPage()+($data['schools']->total() ? 1:0)}} to {{($data['schools']->currentPage()-1)*$data['schools']->perPage()+count($data['schools'])}}  of  {{$data['schools']->total()}}  Results

希望您能理解

答案 1 :(得分:1)

使用$loop变量和当前页面来计算行号。

<td>{{ ($data['schools']->currentPage() - 1) * $data['schools']->perPage() + $loop->iteration }}</td>

计算方法是当前页面减去一,乘以页面大小(以计算前几页),再加上当前页面上的索引。

答案 2 :(得分:1)

由于上述所有答案都缺少现成的方法

我的答案适用于Laravel版本 5.0及更高版本

  

我当前的版本 5.8.28

您不需要任何模糊计算

只需尝试

showing {{$data['schools']->firstItem()}} to {{$data['schools']->lastItem()}} of {{$data['schools']->total()}}

更多https://github.com/laravel/framework/blob/5.8/src/Illuminate/Pagination/LengthAwarePaginator.php#L163

  

编辑获取行号的方法

方法一

@forelse ($data['schools'] as $school)
{{-- Just Add iteration property of $loop Object --}}
    <td>{{$loop->iteration}}</td>
{{-- All Your Fileds Goes Here --}}
@empty
    <td colspan="7" class="text-danger">No records</td>
@endforelse

但是它不会按预期方式工作,因为如果您要更改页面,则iteration属性将从数字1开始

所以

第二种方法

{{ ($data['schools']->currentpage()-1) * $data['schools'] ->perpage() + $loop->index + 1 }}

如果您甚至更喜欢短方法

{{($data['schools']->firstItem() + $loop->index)}}

它将为您提供实际的序列号

如果出现错误,请发表评论

答案 3 :(得分:1)

要对集合中的项目进行编号并像在控制器中进行foreach循环一样简单地添加数据,则视图中始终都具有编号(顺便说一下,这些编号未存储到数据库中)< / p>

$i = 1;
foreach ($schools as $item)
{
$item->setAttribute('number', $i);
$i++;
}

并在视图行上

{{$item->number}}

答案 4 :(得分:0)

在您的控制器中:

$users = User::all()->paginate(3);
return view('/', compact('users'));

在您的刀片中

@foreach($users as $key => $user)
<tr>
       <td>{{ $users->firstItem() + $key }}</td>
       <td>{{ $user->name }}</td>
       <td>{{ $user->email }}</td>
</tr>
@endforeach