外键的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',
        ]);
试试这个

  • 创建请求->PHP artisan make:request StreetsRequest
  • 在ur控制器中找到存储方法或您为存储ur数据而输入的任何名称,并将(Request$Request)更改为(StreetsRequest$Request)
  • 打开你的StreetsRequest文件,在报税表内放上这样的东西
  • 我希望它能起作用,如果你还有任何问题,请告诉我们,谢谢

    查看laravel验证以了解更多信息
    [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);
        }),
    ],