【问题标题】:Validate array if already exists in mysql php laravel验证数组是否已存在于 mysql php laravel
【发布时间】:2020-01-09 05:38:36
【问题描述】:

目前我有一组数组。

我可以使用 Laravel 轻松地将这些数据插入到我的数据库中,而无需进行任何验证

这是示例数组

代码:

        $excel1 = Importer::make('Excel');
        $excel1->hasHeader(true);
        $excel1->load($savePath.$fileName);
        $excel1->setSheet(2);
        $collection1 = $excel1->getCollection();
        $arr1 = json_decode($collection1,true);

    foreach ($arr1 as $row1) {
                $insert_data1[] = array(
                    'projCode'  =>  $projCode,
                    'emp_id'  =>  $row1['company_id'],
                    'type'  =>  'EMP',
                    'deleted'  =>  0,
                    'by_id'  => auth()->user()->id,
                    'updated_by'    =>  auth()->user()->name,
                    'created_at'    =>  now(),
                    'updated_at'    => now(),
                );
            }
  dd($insert_data1);

输出:

我正在使用此代码将这些数据插入到我的表中

    DB::table('tbl_emp_proj')->insert($insert_data1);

这很好用,但问题是,

我正在尝试验证emp_id 是否存在于我的users 表中

这是我的users

数组中emp_id 的值应使用users 中的company_id 字段检查它是否已存在于我的users 中。如果$insert_data1 是一个数组并且应该检查它是否存在于数据库中,我该如何验证它?

更新

目前我有这个验证器,我尝试将$Insert_data1 相加,但给了我undefined var for $insert_data1

      $validator = Validator::make(
        [
            'file'      => $request->file,
            'extension' => strtolower($request->file->getClientOriginalExtension()),
        ],
        [
            'file'          => 'required|max:5000',
            'extension'      => 'required|in:,csv,xlsx,xls',
        ],
        $insert_data1,
        [
            '*.emp_id' => "required|exists:users,company_id",
        ]
    );

【问题讨论】:

  • 你是如何获得 foreach 循环的这些数据的?
  • 我更新了我的问题。我正在使用cyber-duck/excel/import 库。 foreach 数据来自一个 excel 文件的数据。

标签: php mysql laravel cyberduck


【解决方案1】:

您可以使用 Laravel Validator 来验证任何数组,就像它是请求输入一样。

use Illuminate\Support\Facades\Validator;

$validator = Validator::make(
    $insert_data1,
    [
        '*.emp_id' => "required|integer|exists:users,company_id",
    ]
);

编辑:

您可以使用验证器 API 接收错误消息和错误项。

$failed = $validator->fails(); //boolean

$errors = $validator->errors();

$validated = $validator->validated();

$invalid = $validator->invalid();

【讨论】:

  • 我可以将integer 设为字符串之类的吗?因为company_id/emp_id 包含符号
  • 是的,你可以。这一切都根据您的需要和设置。我提到的只是一个例子
  • 我有 undefined var $insert_data1 我只是把你的答案加到我当前的validator
  • 在准备$insert_data1的foreach循环完成后放置验证器检查。否则,请验证变量名在那里没有任何类型。
  • 到目前为止,我在我的validator1 中使用$validator->fails(); 似乎是insert_data1 无法识别来自我的foreach 的var $insert_data1
猜你喜欢
  • 2019-03-11
  • 1970-01-01
  • 2019-08-12
  • 2020-07-25
  • 2020-06-21
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多