gpt4 book ai didi

laravel - 如何在 Laravel 中使用唯一验证?

转载 作者:行者123 更新时间:2023-12-04 15:40:54 24 4
gpt4 key购买 nike

我有评论表:

enter image description here

我的 Comment Controller 从表单中获取值并验证它并将其存储在数据库中。

public function store(Request $request, $product_id)
{
$this->validate($request, array(
'name' => 'required',
'email'=> 'required|email|unique:comments,product_id',
'comment' => 'required',
'rating' => 'required|integer'
));
$product = Product::find($product_id);
$comment = new Comment();
$comment->name = $request->name;
$comment->email = $request->email;
$comment->comment = $request->comment;
$comment->rating = $request->rating;
$comment->product()->associate($product);

$comment->save();
Session::flash('success','Comment was added');
return redirect()->route('product.show',[$product->id]);
}

我正在尝试验证只有唯一的电子邮件 ID 才能对每个 product_id 发表评论,即如果用户已经对 product_id 1 发表了评论,则不允许同一用户再次对该 ID 发表评论。

我试过
'email'=> 'required|email|unique:comments,product_id'

但是正如您所看到的,为相同的 product_id 输入了相同的电子邮件 ID 数据。

用户可以对 n 个 product_id 页面发表评论,但一旦对该 id 发表评论,就不能再次发表评论。

有没有办法验证是否已在数据库中为特定 product_id 输入电子邮件数据,然后不允许同一电子邮件提交表单。

enter image description here

如果不同的 product_id 则可以输入电子邮件。

谢谢。

最佳答案

在你的控制台写这个

php artisan make:provider ValidationServiceProvider

然后更换您的 App\Providers\ValidationServiceProvider
namespace App\Providers;

use Validator;
use App\Comment;
use Illuminate\Support\ServiceProvider;

class ValidationServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot() {
Validator::extend('unique_email_comment', function($attribute, $value, $parameters, $validator) {
return !Comment::where('email', $value)->where('product_id', $parameters[0])->exists();
});
}

/**
* Register the service provider.
*
* @return void
*/
public function register() {
//
}
}

注意:- 请确保型号 App\Comment替换为您用于评论系统的模式的命名空间。

现在将其添加到 供应商config/app.php喜欢
App\Providers\ValidationServiceProvider::class,

现在,您可以通过以下方式验证行的存在:
'email' => 'unique_email_comment:' . $productId;

// or
// 'email' => 'unique_email_comment:' . request()->get('product_id');

您还可以添加这样的自定义消息
return [
'email.unique_email_comment' => 'A comment has already been made for this product with the email provided';
]

请注意,我还没有测试过代码,但是如果所有数据都正确传递并且所有命名空间都正确使用,这应该可以工作。

关于laravel - 如何在 Laravel 中使用唯一验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41054301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com