外键的laravel唯一性验证
我有一个数据库表外键的laravel唯一性验证,laravel,validation,Laravel,Validation,我有一个数据库表streets,其中存储name和block\u id作为blocks表中的外键。因此我希望街道的名称在每个区块中都是唯一的。例如,如果街道的名称是街道1带有街区id1,则不应使用街区id1再次添加,但应允许使用街区id2或3添加街道1。我如何通过Laravel验证获得它 我的验证代码: 在这里,您可以看到我只在那些delete=false的记录上验证唯一性 $validatedValues = $request->validate([ 'block
streets
,其中存储name
和block\u id
作为blocks
表中的外键。因此我希望街道
的名称在每个区块
中都是唯一的。例如,如果街道
的名称是街道1带有街区id
1,则不应使用街区id
1再次添加,但应允许使用街区id
2或3添加街道1。我如何通过Laravel验证获得它
我的验证代码:
在这里,您可以看到我只在那些delete=false的记录上验证唯一性
$validatedValues = $request->validate([
'block' => 'required',
'street' => [
'required',
Rule::unique('streets', 'sName')->where(function ($query) {
return $query->where('delete', false);
})
],
'street_width' => 'required',
]);
试试这个
[https://laravel.com/docs/8.x/validation#form-请求验证]您可以尝试为此编写自定义验证
$validator = $request->validate([
'block' => 'required',
'street' => [
function ($attribute, $value, $fail) use($request){
$street= Street::where('delete', false)->where(function ($query)use($request){
$query->where('sName',$request->sName);
$query->where('block_id',$request->block_id );
})->exists();
if($street){
$fail('The '.$attribute.' is invalid.');
}
},
],
]);
我希望你们有街头模特
如果有任何问题,请告诉我。将此代码替换为街道密钥
'name' => [
'required',
Rule::unique('streets')->where(function ($query) use($request) {
return $query->where('name', $request->name)
->where('block_id', $request->block_id);
}),
],
显示一些代码,以便有人可以帮助您解决问题issue@JohnLobo现在检查我已经发布了一个回复,我不希望
block\u id
是唯一的。我希望街道名称是唯一的。如果block\u id
1的名称为street 1,则block\u id
1不允许使用street 1。街道1应该允许block\u id
2,3…嗨,朋友,你试过代码了吗?如果街道名称是唯一的,则您不能使用不同的block_id
放置另一条街道1,因为街道名称是唯一的,这意味着您不能在您的数据库中添加另一条街道1。。。。
$validator = $request->validate([
'block' => 'required',
'street' => [
function ($attribute, $value, $fail) use($request){
$street= Street::where('delete', false)->where(function ($query)use($request){
$query->where('sName',$request->sName);
$query->where('block_id',$request->block_id );
})->exists();
if($street){
$fail('The '.$attribute.' is invalid.');
}
},
],
]);
'name' => [
'required',
Rule::unique('streets')->where(function ($query) use($request) {
return $query->where('name', $request->name)
->where('block_id', $request->block_id);
}),
],