功能名称为store,在刀片视图中也是如此。一个用户可以对多个产品进行评级,但用户必须先登录才能访问评级
这是刀片代码
<h2>{{ $product->name }}</h2>
<p>{{ $product->description }}</p>
<h3>Reviews</h3>
<ul>
@foreach ($product->reviews as $review)
<li>{{ $review->review }} - {{ $review->rating }} stars</li>
@endforeach
</ul>
<h3>Add a Review</h3>
<form method="POST" action="/products/{{ $product->id }}/reviews">
@csrf
<div>
<label for="review">Review</label>
<textarea name="review" id="review">{{ old('review') }}</textarea>
@error('review')
<div>{{ $message }}</div>
@enderror
</div>
<div>
<label for="rating">Rating</label>
<input type="number" name="rating" id="rating" min="1" max="5" value="{{ old('rating') }}">
@error('rating')
<div>{{ $message }}</div>
@enderror
</div>
<button type="submit">Submit Review</button>
</form>
控制器。用户可以为单个产品评分1-5
public function store(Product $product)
{
$data = request()->validate([
'review' => 'required|string',
'rating' => 'required|integer|min:1|max:5',
]);
$review = new Review($data);
$review->user_id = auth()->user()->id;
$product->reviews()->save($review);
return back();
路线
Route::post('/products/{product}/reviews', [HomeController::class, 'store']);
Route::middleware(['auth'])->group(function () {
Route::post('/products/{product}/reviews', [HomeController::class, 'store']);
数据库
$table->unsignedBigInteger('product_id');
$table->unsignedBigInteger('user_id');
$table->text('review');
$table->integer('rating');
$table->timestamps();
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
1条答案
按热度按时间ff29svar1#
您可以使用以下方法修复错误:
为您的路线添加名称:
更新表单的操作: