Преобразование массива в строку ErrorException при загрузке изображения в laravel 7 - PullRequest
0 голосов
/ 07 августа 2020

Я использую 3 массива для хранения в таблицах курсов. Пожалуйста, помогите мне сохранить массив в строке или сохранить массив в базе данных ... моя проблема с массивом:

  • Я не могу сохранить и сохранить изображение в базе данных

  • Я не могу сохранить результаты и требования массива в базе данных

<div class="col-md-10"><input type="file" class="form-control" name="images" id="images" ></div>
    //and this 
<input type="text" class="form-control" name="outcomes[]" id="outcomes">
    //or this
<input type="text" class="form-control" name="requirements[]" id="requirements">

Вызов функции моего магазина:

public function store(CourseRequest $request)
{
    $imageUrl = $this->upload2Images($request->file('images'));

    auth()->user()->course()->create( 
        $request->except(['_token','files']),
        ['images'=>$imageUrl]);

    return redirect(route('courses.index'));
}

и upload2Images()

public function upload2Images($file)
    {
        $year = Carbon::now()->year;
        $month = Carbon::now()->month;
        $imagePath = "upload/images/{$year}/{$month}/";
        $filename = $file->getClientOriginalName();
        $file = $file->move(public_path($imagePath), $filename);
        $url['images'] = "upload/images/{$year}/{$month}/$filename";
        return $url;
    }

Когда я использую

$data = array_merge(
            $request->except(['_token','files','outcomes','requirements']),
            $images
        );
$id =  auth()->user()->course()->create($data)->id;

Он работает нормально, но результаты и требования - это массив, который я скрываю таким образом. Могу я передать эти аргументы?

Ответы [ 2 ]

2 голосов
/ 07 августа 2020

Вы звоните:

    $url['images'] = "upload/images/{$year}/{$month}/$filename";
    return $url;

Затем:

    $imageUrl = $this->upload2Images($request->file('images'));

Итак, $imageUrl - это массив. но код для сохранения записи ожидает, что это будет строка.

`...->create( $request->except(['_token','files']),['images'=>$imageUrl]);`

Кроме того, вы, кажется, передаете 2 параметра create, когда требуется только один

Возможно, вы имели в виду позвонить примерно так, как показано ниже?

$images = $this->upload2Images($request->file('images'));
$data = array_merge($request->except(['_token','files']), $images);
auth()->user()->course()->create($data);
1 голос
/ 07 августа 2020

решено, спасибо, что я использую в этой модели

protected $casts = [
        'images' => 'array',
        'requirements' => 'array',
        'outcomes' => 'array',
    ];

и контроллер использует это

   $images = $this->upload2Images($request->file('images'));
        $requirements = $request->requirements;
        $outcomes = $request->outcomes;

        $data = array_merge($request->except(['_token']), ['images'=>$images],['requirements'=>$requirements],['outcomes'=>$outcomes]);
        $id =  auth()->user()->course()->create($data)->id;
...