Если вас беспокоит количество запросов можете что-то подобное сделать, но только более элегантно
if($request->photo !== null){
/**
* Городим конструкцию, которая позволит нам избежать n+1 запросов при прикреплении фотографий к записи
* Стандартная реализация связей нам не подходит потому что у нас помимо указания ID поста
* необходимо добавить порядкове номера для сортировки фотографий
* Аналогичная функция используется и для перетаскивая
*/
$table = with(new Photo)->getTable();
$imageable_type = Advert::class;
$imageable_id = $advert->id;
$cases = [];
$ids = [];
$params = [];
foreach ($request->photo as $value => $id) {
$id = (int) $id;
$cases[] = "WHEN {$id} then ?";
$params[] = $value;
$ids[] = $id;
}
$ids = implode(',', $ids);
$cases = implode(' ', $cases);
$params[] = $imageable_type;
$params[] = $imageable_id;
$this->db->update("UPDATE `{$table}` SET `position` = CASE `id` {$cases} END, `imageable_type` = ?, `imageable_id` = ? WHERE `id` in ({$ids})", $params);
}