【问题标题】:Laravel Excel validation importLaravel Excel 验证导入
【发布时间】:2019-12-29 14:22:42
【问题描述】:

我正在使用 Maatwebsite/excel 组件导入 excel 文件。在这种情况下,导入用户。我需要验证邮件不存在,然后导入唯一数据

我在导入文件中有这段代码

namespace App\Imports;

use App\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;

use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\WithValidation;

class UsersImport implements ToModel, WithValidation
{
    use Importable;
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        $user = User::create([
            'name'     => $row[0],
            'email'    => $row[1], 
            'password' => Hash::make($row[2]),
        ]);

        $user->assignRole('guest');
    }

    public function rules(): array
    {
        return [
            '0' => 'required|string',
            '1' => 'unique:users',
        ];
    }

}

我的控制器中的这段代码:

public function import() 
{
    Excel::import(new UsersImport, request()->file('file'));

    return back()->with('success', 'Importado con éxito!');
}

当我想导入重复数据时,出现以下错误

SQLSTATE[42S22]:未找到列:1054 'where 子句'中的未知列'1.1'(SQL:从users 中选择计数(*)作为聚合,其中1.1 = admin@adsmdfin。 com)

【问题讨论】:

标签: excel laravel validation import


【解决方案1】:

我找到了问题的解决方案

namespace App\Imports;

use App\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;

use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\WithValidation;

class UsersImport implements ToModel, WithValidation
{
    use Importable;
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
public function rules(): array
{
    return [
        '1' => 'unique:users,email'
    ];

}

public function customValidationMessages()
{
    return [
        '1.unique' => 'Correo ya esta en uso.',
    ];
}

public function model(array $row)
{
    $user = User::create([
        'name'     => $row[0],
        'email'    => $row[1], 
        'password' => Hash::make($row[2]),
    ]);

    $user->assignRole('guest');
}


}

【讨论】:

    【解决方案2】:

    验证器的存在规则将使用数组的键(在您的情况下为 1)作为在 users 表中搜索的列。

    您可以像这样指定列,它应该可以工作。

    '1' => 'unique:users,email',
    

    发件人:https://laravel.com/docs/5.8/validation#rule-exists

    【讨论】:

    • 太棒了!那是
    猜你喜欢
    • 2021-04-29
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多