【发布时间】:2021-10-13 12:19:26
【问题描述】:
我想创建一个博客,当我写一篇文章时,一篇文章可以有 2 个或更多类别。我成功地使用 ONE 类别做到了这一点。
Posts.php:
<?php
namespace App\Models;
use App\Events\PostDeletedEvent;
use App\Events\PostUpdatedEvent;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use App\Models\Category;
class Post extends Model
{
use HasFactory;
protected $dispatchesEvents = [
'deleted' => PostDeletedEvent::class,
'updated' => PostUpdatedEvent::class,
];
protected $fillable = [
'title',
'content',
'slug',
'user_id'
];
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function categories(): BelongsToMany
{
return $this->belongsToMany(Category::class);
}
public function getRouteKeyName(): string
{
return 'slug';
}
}
**category.php:**
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use App\Models\Post;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Category extends Model
{
use HasFactory;
protected $fillable = [
'name'
];
public function posts(): HasMany
{
return $this->hasMany(Post::class);
}
}
模型和关系
我已经设置了两个具有多对多关系的表,这些表由名为 category_post 的数据透视表进行中间处理。在我的显示视图中,我可以看到一个帖子何时有两个类别
我不知道如何使用 foreach 将多个类别插入到我的帖子中
我的控制器:
public function store(PostRequest $request): RedirectResponse
{
$post = Post::query()->create($request->validated());
$post->categories()->attach($request->category);
还有我的刀片页面:
<form action="{{ $post->exists ? route('posts.update', $post) : route('posts.store') }}" method="post">
@csrf
@method($post->exists ? 'put' : 'post')
<div>
<x-label for="title" :value="__('Title')" />
<x-input id="title" class="block mt-1 w-full" type="text" name="title" :value="old('title', $post->title)" autofocus />
</div>
<div>
<x-label for="content" :value="__('Content')" />
<x-input id="content" class="block mt-1 w-full" type="text" name="content" :value="old('content', $post->content)" />
</div>
<div>
<x-label for="category" :value="__('Categories')"></x-label>
<select name="category" id="category">
<option value="">- - Select a category - -</option>
@foreach ($categories as $category)
<option value="{{$category->id}}">{{$category->name}}</option>
<?php // <option value="{{$category->id}}">{{$category->name}}</option>?>
@endforeach
</select>
<select name="category" id="category">
<option value="">- - Select a category - -</option>
@foreach ($categories as $category)
<option value="{{$category->id}}">{{$category->name}}</option>
<?php // <option value="{{$category->id}}">{{$category->name}}</option>?>
@endforeach
</select>
</div>
<div>
<x-button>Submit</x-button>
</div>
【问题讨论】:
-
请分享您的控制器代码
-
公共函数存储(PostRequest $request): RedirectResponse { dd($request->category); $post = Post::query()->create($request->validated()); $post->categories()->attach($request->category);
-
dd($request->category); 的结果是什么?
-
类别的id
标签: php laravel eloquent laravel-8