Laravel Импорт в Excel, ошибка при передаче переменной - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу импортировать некоторые категории, но мне также нужен идентификатор родительской категории.

  public function importCategory(Request $request, $cat_id){

        $import = new CategoryImport($cat_id);
        $import->import($request->file);
        if ($import->failures()->count() > 0) {
            $message = '';
            foreach ($import->failures() as $failure) {
                $failure->row(); // row that went wrong
                $failure->attribute(); // either heading key (if using heading row concern) or column index
                $failure->errors(); // Actual error messages from Laravel validator
                $failure->values(); // The values of the row that has failed.

            }
            return redirect()->back();
        } else {
            return redirect()->back()->with('success', sprintf('Success'));
        }


    }

Вот CategoryImport. php

class CategoryImport implements WithHeadingRow, WithValidation, SkipsOnFailure,OnEachRow
{

    use Importable, SkipsFailures;

    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    protected $cat_id = null;

    public function __construct(  $cat_id) {
        $category_id = $cat_id;
    }


    public function onRow(Row $row)
    {
        $row=$row->toArray();

        Category::create([

            'name' => $row['name'],
            'image' => $row['image'],
            'business_category_id' => $this->category_id,
        ]);

    }
}

Итак, вот ошибка, она говорит неопределенное свойство, и я пытаюсь выяснить это, но не понимаю .

Неопределенное свойство: App \ Imports \ CategoryImport :: $ category_id

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Вы не правильно установили cat_id. В вашем CategoryImport у вас должно быть:

protected $category_id = null;

public function __construct($cat_id) {
    $$this->category_id = $cat_id;
}
0 голосов
/ 30 апреля 2020

Внутри конструктора необходимо назначить правильную переменную.

class CategoryImport implements WithHeadingRow, WithValidation, SkipsOnFailure,OnEachRow
{

    use Importable, SkipsFailures;

    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    protected $cat_id = null;

    public function __construct($cat_id) {
        $this->cat_id = $cat_id;
    }

Я думаю, что строка 'business_category_id' => $this->category_id неправильная. Вам нужно использовать

'business_category_id' => $this->cat_id

, потому что это переменная, которую вы назначаете в конструкторе.

...