Laravel-Excel возвращает требуемую ошибку со всеми строками

Я внедряю Laravel-Excel в свой проект и не могу выполнить проверку.

Я пытаюсь загрузить xlsx файл с одной строкой данных, но все же импорт выдает required ошибку.

Ниже мой код EventResultImport

namespace App\Imports;

use App\Models\Data\EventResult;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithValidation;
use Maatwebsite\Excel\Imports\HeadingRowFormatter;

class EventResultImport implements ToModel, WithValidation, WithHeadingRow
{
    use Importable;

    public function model(array $row)
    {
        HeadingRowFormatter::default('none');

        return new EventResult([
            'event_id' => $row[0],
            'event_name' => $row[1],
        ]);
    }

    public function rules(): array
    {
        return [
            //'EventId' => 'required|numeric', Tried this
            //'*.EventId' => 'required|numeric', Tried this
            '0' => 'required|numeric'

        ];
    }
}

Я получаю сообщение об ошибке при событии второй строки, если в столбце EventId есть числовые данные.

введите описание изображения здесь

Спасибо


person Mike Ross    schedule 21.11.2018    source источник


Ответы (1)


Вы реализуете WithHeadingRow, поэтому атрибуты должны совпадать:

public function rules(): array
{
    return [
        'event_id' => 'required|numeric'
    ];
}

Чтобы пропустить нули:

public function model(array $row)
{
    if (!isset($row[0])) {
        return null;
    }

    return new User([
        'name' => $row[0],
    ]);
}
person Arthur Samarcos    schedule 21.11.2018
comment
В сообщении говорится, что вам не хватает идентификатора в строке 2, и вы сказали, что в вашем файле только одна строка, поэтому, возможно, ваш файл имеет оставшиеся данные в строке 2. - person Arthur Samarcos; 22.11.2018
comment
Я думаю, вы правы. Как пропустить пустую строку из проверки? - person Mike Ross; 22.11.2018
comment
это пропускает всю строку, если первая ячейка пуста. - person Mike Ross; 22.11.2018
comment
Что ж ... Это вы говорите, что требуется первая ячейка. :П - person Arthur Samarcos; 22.11.2018
comment
первая ячейка обязательна, но в строке есть другие ячейки, и если первая пуста, она всегда будет пропускать всю строку и не проверять. - person Mike Ross; 22.11.2018
comment
В общем, строка - это набор полей, принадлежащих одному элементу. Разве это не ваш случай? Когда вы говорите, что требуется первая ячейка, это означает, что вся ваша строка недействительна, если первая строка не указана, это именно то, что система должна делать, это нормальное поведение. Может быть, вы сможете прояснить, чего пытаетесь достичь. - person Arthur Samarcos; 22.11.2018