You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Blade中如何显示含用户名的借阅数据(数据透视表)?

实现Laravel Blade视图展示含用户名的借阅数据

没问题,我来帮你一步步搞定这个功能。基于你已经配置好的User和Book模型多对多关联(带loans数据透视表的pivot字段),这里提供两种常见的实现方式,你可以根据场景选择:


方式一:用Eloquent关联(推荐,贴合Laravel ORM风格)

1. 控制器预加载数据

先在你的控制器(比如新建一个LoanController)里写方法,预加载用户和他们的借阅书籍,避免N+1查询问题:

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class LoanController extends Controller
{
    public function index()
    {
        // 预加载用户的借阅书籍,自动带上pivot里的字段
        $users = User::with('book')->get();
        
        return view('loans.index', compact('users'));
    }
}

2. Blade视图渲染表格

在resources/views/loans/index.blade.php里,遍历用户和对应的借阅记录,生成表格:

<div class="container mt-4">
    <h2>全量借阅记录</h2>
    <table class="table table-striped table-bordered">
        <thead class="table-dark">
            <tr>
                <th>用户名</th>
                <th>书籍名称</th>
                <th>借阅日期</th>
                <th>借阅状态</th>
                <th>记录创建时间</th>
            </tr>
        </thead>
        <tbody>
            @foreach($users as $user)
                <!-- 遍历该用户的每一条借阅记录 -->
                @foreach($user->book as $borrowedBook)
                <tr>
                    <td>{{ $user->name }}</td>
                    <td>{{ $borrowedBook->title }}</td>
                    <!-- 用Carbon格式化日期,确保loan_date是日期类型字段 -->
                    <td>{{ $borrowedBook->pivot->loan_date->format('Y-m-d H:i') }}</td>
                    <td>
                        <!-- 根据状态显示不同样式的标签 -->
                        @match($borrowedBook->pivot->status)
                            @case('borrowed')
                                <span class="badge bg-warning">已借出</span>
                                @break
                            @case('returned')
                                <span class="badge bg-success">已归还</span>
                                @break
                            @default
                                <span class="badge bg-secondary">未知状态</span>
                        @endmatch
                    </td>
                    <td>{{ $borrowedBook->pivot->created_at->format('Y-m-d H:i') }}</td>
                </tr>
                @endforeach
            @endforeach
        </tbody>
    </table>
</div>

方式二:直接查询数据透视表(适合数据量较大的场景)

如果想直接从loans表拉取所有关联数据,用DB查询构造器会更高效:

1. 控制器查询数据

public function index()
{
    $loans = \DB::table('loans')
        ->join('users', 'users.id', '=', 'loans.user_id')
        ->join('books', 'books.id', '=', 'loans.book_id')
        ->select(
            'users.name as username',
            'books.title as book_title',
            'loans.loan_date',
            'loans.status',
            'loans.created_at'
        )
        ->get();
    
    return view('loans.index', compact('loans'));
}

2. Blade视图渲染表格

这种方式下视图更简洁,每条记录已经包含所有需要的字段:

<div class="container mt-4">
    <h2>全量借阅记录</h2>
    <table class="table table-striped table-bordered">
        <thead class="table-dark">
            <tr>
                <th>用户名</th>
                <th>书籍名称</th>
                <th>借阅日期</th>
                <th>借阅状态</th>
                <th>记录创建时间</th>
            </tr>
        </thead>
        <tbody>
            @foreach($loans as $loan)
            <tr>
                <td>{{ $loan->username }}</td>
                <td>{{ $loan->book_title }}</td>
                <td>{{ \Carbon\Carbon::parse($loan->loan_date)->format('Y-m-d H:i') }}</td>
                <td>
                    @match($loan->status)
                        @case('borrowed')
                            <span class="badge bg-warning">已借出</span>
                            @break
                        @case('returned')
                            <span class="badge bg-success">已归还</span>
                            @break
                        @default
                            <span class="badge bg-secondary">未知状态</span>
                    @endmatch
                </td>
                <td>{{ \Carbon\Carbon::parse($loan->created_at)->format('Y-m-d H:i') }}</td>
            </tr>
            @endforeach
        </tbody>
    </table>
</div>

最后一步:配置路由

别忘了在routes/web.php里加对应的访问路由:

use App\Http\Controllers\LoanController;

Route::get('/borrow-records', [LoanController::class, 'index'])->name('borrow.records');

现在访问/borrow-records就能看到带用户名的完整借阅数据表格啦!

内容的提问来源于stack exchange,提问作者Jabbar Queenson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:24:42