Laravel 验证是否有重复数据的问题
本人接触Laravel时间不长,在实现收藏功能的时候遇到一个小问题,如何验证自己是否重复收藏了?
表结构:
Schema::create('favors', function (Blueprint $table) {
$table->increments('id')->comment('收藏id');
$table->integer('userid')->notNULL()->comment('收藏人ID')->index();
$table->integer('section')->notNULL()->comment('收藏章节id')->index();
$table->integer('question')->notNULL()->comment('收藏题目id')->index();
$table->timestamps();
});
这个是一个试题收藏的表结构,如果同一个 收藏人ID 收藏的 题目id 重复了,那就验证不通过,用sql表示就是:
$result=Favors::where('userid',$request->user()->id)->where('question',$request->question)->first() ? '重复' : '第一次收藏';
在表单验证中,我看到 unique:table,column,except,idColumn 可以很简单的实现 数据是否重复,不知道这个规则该如何写?
下面是我之前写的一个 用户修改资料的时候的一个表单验证,这种只能是排除自己
protected function validateUser(Request $request)
{
$request->validate([
'username' => 'required|min:2|max:10',
'mobile' => 'regex:/^1[345789][0-9]{9}$/|unique:users,mobile,' . $request->user()->id,
'sex' => 'required',
]);
}
另外前面还考虑 通过关联模型,隐藏收藏按钮 也是一个方法,但是考虑到收藏功能不常用,没必要在用户不使用收藏功能的时候 也要查询数据,所以最好的办法是 当用户使用收藏功能时,只要返回给他一个 重复收藏的消息 就可以。
规则可以像sql一样写: