как обновить и удалить (отсоединить) несколько старых изображений в формате json - PullRequest
1 голос
/ 28 апреля 2019

это все еще связано с моим постом здесь Как удалить и отменить связь нескольких изображений в формате json

Я могу сохранить и удалить все несколько изображений.но у меня все еще проблема при обновлении и удалении старого изображения.мой код по-прежнему не удаляет олдимаж при обновлении нового изображения.

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

public function update(Requests\UpdatePostRequest $request, $id)
{

    $post = Post::findOrFail($id);
    $oldImage = $post->image;
    $data = $this->handleRequest($request);
    $post->update($data);


    if($oldImage != $post->image)
    {
        foreach (json_decode($post->image, true) as $oldImage) {
        $this->removeImage($oldImage);
        }
    }

    if($request->submitbutton =='Publish')
    {
        Alert::success('Your post was updated successfully')->persistent('Close');
        return redirect(route('admins-blogpost.index'));
    }
    if($request->submitbutton =='Save Draft')
    {
        Alert::success('Your draft was updated successfully')->persistent('Close');
        return redirect(route('admins-blogpost.index'));
    }
}

Мой метод handlerequest для сохранения нескольких изображений, этот метод работает с использованием метода store.так что эта проблема не здесь.

private function handleRequest($request)
{
    $data = $request->all();

    if($request->hasFile('image'))
    {
        $images = $request->file('image');
        foreach($images as $key=>$image){
            $fileName    = $image->getClientOriginalName();

            $destination = $this->uploadPath;

            $successUploaded = $image->move($destination, $fileName);
            if($successUploaded)
            {
                $width = config('cms_blog.image.thumbnail.width');
                $height = config('cms_blog.image.thumbnail.height');
                $extension = $image->getClientOriginalExtension();
                $thumbnail = str_replace(".{$extension}", "_thumb.{$extension}", $fileName);
                Image::make($destination . '/' . $fileName)
                        ->resize($width,$height)
                        ->save($destination . '/' . $thumbnail);
                $datax[] = $fileName;
            }
            $data['image'] = json_encode($datax);
        }

    }
    return $data;
}

и метод удаления

public function removeImage($image)
{
    if( ! empty($image))
    {
        $imagePath = $this->uploadPath . '/' . $image;
        $ext = substr(strrchr($image, '.'), 1);
        $thumbnail = str_replace(".{$ext}", "_thumb.{$ext}", $image);
        $thumbnailPath = $this->uploadPath . '/' . $thumbnail;
        if(file_exists($imagePath) ) unlink($imagePath);
        if(file_exists($thumbnailPath) ) unlink($thumbnailPath);
    }
}

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

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Хранение нескольких названий изображений в одном столбце, что не очень хорошая идея. Я предложил вам создать еще одну таблицу post_images или что-то еще.

И создайте отношение hasMany из таблицы сообщений с таблицей post_images. Тогда у вас есть много гибкости здесь. Также вы можете создать Полиморфное Отношение, чтобы использовать одну и ту же модель изображения с несколькими Моделями.

0 голосов
/ 28 апреля 2019

В цикле for, где вы удаляете изображения, я полагаю, что вы хотите выполнить итерацию более $oldImage, а не $post->image:

foreach (json_decode($oldImage, true) as $item) {
    $this->removeImage($item);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...