Свойство Laravel [имя файла] не существует в этом экземпляре коллекции - PullRequest
1 голос
/ 10 июля 2019

Когда я редактирую продукт, я пытаюсь также отредактировать несколько изображений, поэтому, если я загружаю новые изображения, старые изображения должны быть заменены новыми, но теперь, если я загружаю изображения, я получаю ошибку Property [filename] does not exist on this collection instance." истарые изображения не удаляются, но новые изображения были добавлены.Существуют связанные таблицы products и ProductsPhoto, в таблице ProductsPhoto есть столбец имени файла и столбец product_id.Как я могу заменить старые изображения новыми при редактировании продукта?

Мой код.

Шаблон лезвия

 <input multiple="multiple" name="photos[]" type="file"> 

Контроллер

 public function update(Request $request)
{
 $product = Product::with('ProductsPhoto')->find($request->product_id,'id');

  if ($request->hasFile('photos')){
        //Add the new photo
        foreach ($request->photos as $photo) {
            $filename = $photo->store('public/photos');
            ProductsPhoto::create([
                'product_id' => $product->id,
                'filename' => $filename
            ]);
        } 
        $oldFilename = $product->ProductsPhoto->filename;
        //Update the database
         $product->ProductsPhoto->filename = $filename;

         //Delete old photo
         Storage::delete($oldFilename);
    }

     $product->save();
  }

1 Ответ

2 голосов
/ 10 июля 2019

Кажется, что товар имеет много productsPhoto , поэтому $product->ProductsPhoto - это коллекция, а не фотография!

Я не знаю, как определяются ваши сущности, особенно классы Product и ProductPhoto : Но вы должны удалить старую коллекцию productsPhoto

$product->productsPhoto()->delete();

и сохраните новые:

$newPhotos=[];
foreach ($request->photos as $photo) {
    $filename = $photo->store('public/photos');
    $newPhotos[] = new ProductsPhoto(['filename'=>$filename]);
} 
$product->productsPhoto()->saveMany($newPhotos);

Вместо того, чтобы пытаться заменить имена файлов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...