Удаление элемента из массива столбца таблицы в Laravel - PullRequest
0 голосов
/ 03 февраля 2020

В таблице сообщений есть столбец с изображениями. в изображениях я храню данные в виде массива JSON как:

["p1.jpg", "p2.jpg","p4.jpg","p9.jpg","p11.jpg", "p12.jpg","p13.jpg", "p14.jpg"];

Я хочу удалить одно из этих изображений с помощью ajax. Я посылаю идентификатор и изображение по ajax и правильно получаю этот идентификатор и изображение в контроллере:

  public function remove() {

$imgs = Image::where('id', request()->id)->pluck('images');
return $imgs;
  }

reults in console:
[Array(8)]
0: (8) ["p1.jpg", "p2.jpg", "p4.jpg", "p9.jpg", "p11.jpg", "p12.jpg", "p13.jpg", "p14.jpg"]
length: 1
__proto__: Array(0)

Кроме того, я получаю имя изображения по запросу () -> img из ajax.

$image = request()->img; => p12.jpg

Как я могу удалить $ image из массива $ images?

1 Ответ

1 голос
/ 03 февраля 2020

Сначала Вы можете преобразовать изображения attr в массив вашей модели Изображения

//App\Image
protected $casts = [
        'images' => 'array'
];

Затем в функции удаления:

public function remove() {
  if(request()->id && request()->img) {
     $imgModel = Image::findOrFail(request()->id);
     $imgs = $imgModel->images;

     // find request()->img position inside imgs array
     $position = array_search(request()->img, $imgs);

     // delete request()->img
     unset($imgs[$position]);

     $imgModel->images = array_values($imgs);
     $imgModel->save();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...