2017-01-13 2 views
0

Мне нужно загрузить несколько изображений на сервер. Если изображение существует в имени обновления базы данных, загрузите новое. Просто создайте новую запись в базе данных. Сценарий Я загружаю новые изображения, но не обновляю существующие.Получить элемент из коллекции по индексу Laravel 5

if ($request->hasFile('images')) { 
    foreach ($request->file('images') as $key => $image) { 
     $filename = time() . $image->getClientOriginalName(); 
     $image->move('img/products', $filename); 

     if (isset($product->images[$key])) { 
      $result = $product->images[$key]->update([ 
       'name' => $filename 
      ]); 
      dd($result); 
     } else { 
      $product->images()->create([ 
       'name' => $filename 
      ]); 
     } 
    } 
} 
+0

вы также должны показать свою форму ввода, чтобы мы могли понять, к какому типу запроса приходит –

+0

Что делает '$ product' ИЛИ как заполнять его коллекцией? –

+0

ввод type файл. Что еще? –

ответ

0

Это должно быть сделано как этот

if ($request->hasFile('images')) { 
     foreach ($request->file('images') as $key => $image) { 
      $filename = time() . $image->getClientOriginalName(); 
      $image->move('img/products', $filename); 

      $product->images->updateOrCreate(['id' => $key], ['name' => $filename]); 
     } 
    } 

Пожалуйста, Не то, что я предполагаю, что $ ключ ID iamges означает, что ваш вход должен быть назван как этот

<imput name="images['Id_of_image_in_databse']" type="file" /> 
+0

И откуда я собираюсь получить id ??? –

+0

вот почему я сначала попросил вас предоставить свой код для формы –

2

Используйте updateOrCreate() метод вместо от всего if ... else статья:

$product->images->updateOrCreate(['id' => $key], ['name' => $filename]); 
+2

upvote для 'updateOrCreate()' suggestion ... –

+0

Is - это индекс входного файла, а не id –

+0

Ключ - это номер ввода, если использовался второй вход - обновить второе изображение в db –

0

Прежде всего, необходимо убедиться, что о результате кода, поместите ниже кода перед if ($request->hasFile('images')) { линии:

print('<pre style="color:red;">Uploaded image:: '); 
print_r($request->file('images')); 
print('</pre>'); 


print('<pre style="color:red;"> Product Image:: '); 
print_r($product->images); 
print('</pre>'); 
exit; 

Это не только часть ответа! Поэтому дайте мне знать результат из кода выше.

1

Вы также можете использовать методы замечательной коллекции laravel, чтобы проверить, содержит ли коллекция определенный элемент/ключ. Пожалуйста, взгляните на https://laravel.com/docs/5.3/collections#method-get, чтобы получить элемент по ключу из коллекции. Если элемент не существует, то null будет возвращен. Вы можете сделать что-то вроде

if(null !== $product->images()->get($key)){ 
    // update 
    // remove old image 
} else { 
    // create 
} 

Вы также можете удалить старое изображение со своего сервера, когда находитесь в методе обновления.

Смежные вопросы