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
相关产品推荐
相关产品推荐

