📅  最后修改于: 2023-12-03 15:39:22.485000             🧑  作者: Mango
在 Laravel 中,嵌套资源是指一个资源关系嵌套在另一个资源中。例如,一个文章资源可能包含多个评论资源。在这种情况下,可以使用嵌套资源来管理这些关系,并在单个请求中返回所有相关数据。
在 Laravel 中定义嵌套资源的路由非常容易。我们可以使用 Route::resource
方法来定义主资源路由,并在其内部定义嵌套资源路由。下面是一个示例:
Route::resource('posts.comments', 'PostCommentController');
在这个示例中,我们定义了一个名为 posts.comments
的嵌套资源,其主资源是 posts
,控制器为 PostCommentController
。此路由将创建以下路由:
+--------+------------------------------------------+------------------------+------------------------+-----------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+------------------------------------------+------------------------+------------------------+-----------------------------------------------+--------------+
| | GET|HEAD | posts/{post}/comments | posts.comments.index | App\Http\Controllers\PostCommentController@index | web |
| | POST | posts/{post}/comments | posts.comments.store | App\Http\Controllers\PostCommentController@store | web |
| | GET|HEAD | posts/{post}/comments | posts.comments.show | App\Http\Controllers\PostCommentController@show | web |
| | PUT|PATCH | posts/{post}/comments | posts.comments.update | App\Http\Controllers\PostCommentController@update | web |
| | DELETE | posts/{post}/comments | posts.comments.destroy | App\Http\Controllers\PostCommentController@destroy | web |
+--------+------------------------------------------+------------------------+------------------------+-----------------------------------------------+--------------+
注意路由参数 post
在 URL 中嵌套在 posts
之后。在控制器方法中,我们可以使用这个参数来查找该帖子的所有评论。
在控制器方法中,我们可以使用 Eloquent 提供的 where
子句和 with
子句来检索嵌套资源的数据。例如,我们可以在 PostCommentController
控制器中编写以下代码:
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostCommentController extends Controller
{
public function index(Post $post)
{
$comments = $post->comments()->get();
return response()->json([
'post' => $post,
'comments' => $comments,
]);
}
}
在这个示例中,我们使用 Post
模型的 comments
关联来检索该文章的所有评论。然后,我们返回包含文章和评论的 JSON 响应。
在视图文件中,我们可以使用 Laravel 提供的 @foreach
指令来遍历嵌套资源的数据。例如,我们可以在 index.blade.php
文件中编写以下代码:
<h1>{{ $post->title }}</h1>
<p>{{ $post->body }}</p>
<h2>Comments</h2>
<ul>
@foreach ($comments as $comment)
<li>{{ $comment->body }}</li>
@endforeach
</ul>
这个示例使用 Blade 模板引擎的 @foreach
指令来遍历所有评论,并在无序列表中显示它们的正文。
嵌套资源是管理资源关系的有用工具。在 Laravel 中,我们可以使用简单的路由和控制器方法来管理这些关系,并使用 Blade 模板引擎来显示数据。