【发布时间】:2016-01-17 15:47:49
【问题描述】:
这些是我在课堂上的规则:
class AppointmentsController extends Controller
{
protected $rules = [
'appointment' => ['required', 'min:5'],
'slug' => ['required', 'unique:appointments'],
'description' => ['required'],
'date' => ['required', 'date_format:"Y-m-d H:i"'],
];
这是在 laravel 官方文档中:
有时,您可能希望在唯一检查期间忽略给定的 ID。 例如,考虑一个“更新配置文件”屏幕,其中包括 用户名、电子邮件地址和位置。当然,你会想要 验证电子邮件地址是否唯一。但是,如果用户只 更改名称字段而不是电子邮件字段,您不想要 验证错误被抛出,因为用户已经是所有者 电子邮件地址。你只想抛出一个验证错误,如果 用户提供了一个已被其他用户使用的电子邮件地址 用户。要告诉唯一规则忽略用户的 ID,您可以通过 ID作为第三个参数:
'email' => 'unique:users,email_address,'.$user->id.',user_id'
我尝试在我的规则中使用它:
'slug' => ['required', 'unique:appointments,id,:id'],
这确实忽略了当前行,但它完全忽略了它。我想要完成的是,我希望它仅在 slug 未更改时才忽略当前行。当它更改为在另一行中已经是唯一的东西时,我希望它抛出错误。
【问题讨论】:
-
试试这个方法:
'slug' => ['required', 'unique:appointments,slug,:id'] -
是的,我应该提到我试过了,没有运气。我的猜测是它应该像那样工作,所以我需要弄清楚为什么它没有。感谢您的评论:)
-
你为什么要把它放在控制器中?它应该进入一个不能在控制器中使用的自定义请求类。不确定这是否是导致问题的原因。
标签: php laravel-5 unique rules slug