Задать вопрос
@dev400

Как быть с картинкой при записи в базу?

В базу записываются строки, и путь к картинке.
скрипт загрузки картинки:
<?php
namespace Common;

class Upload {
    
    public function make($uploadDir, $file) {

        $pathToUpload = $uploadDir . basename($file['name']);

        if( move_uploaded_file($file['tmp_name'], $pathToUpload) ) {

            return $pathToUpload;

        }

        return false;
        
    }

}

Возвращает путь к файлу.

Кусок модели сохранения в базу:
$params = [
                "id" => $array['category_id'],
                "cat_name" => $array['category_name'],
                "cat_url" => $array['category_url'],
                "image_url" => $array['image_url'],
                "parent_cat" => $array['parent_cat'],
            ];

            $sql = "UPDATE {$this->table} SET `cat_name` = :cat_name, `cat_url` = :cat_url, `image_url` = :image_url, `parent` = :parent_cat WHERE `id` = :id";


Так вот, загрузили мы картинку, все хорошо. В следующий раз мы хотим поменять какую то строку, но картинку мы загружать не будем.
И соответственно получим ошибку, что image_url не передался. Как сделать так, чтобы image_url был не обязательным параметром при сохранении?

В голову приходит простыня:
public function updateCategory(Array $array) {

        if ( isset($array['image_url']) ) {

            $params = [
                "id" => $array['category_id'],
                "cat_name" => $array['category_name'],
                "cat_url" => $array['category_url'],
                "image_url" => $array['image_url'],
                "parent_cat" => $array['parent_cat'],
            ];

            $sql = "UPDATE {$this->table} SET `cat_name` = :cat_name, `cat_url` = :cat_url, `image_url` = :image_url, `parent` = :parent_cat WHERE `id` = :id";

        } else {

            $params = [
                "id" => $array['category_id'],
                "cat_name" => $array['category_name'],
                "cat_url" => $array['category_url'],
                "parent_cat" => $array['parent_cat'],
            ];

            $sql = "UPDATE {$this->table} SET `cat_name` = :cat_name, `cat_url` = :cat_url, `parent` = :parent_cat WHERE `id` = :id";

        }


        if( !parent::save( $params, $sql ) ) {

            throw new \Exception('Ошибка редактирования категории');

        }

    }


Но это же трэш. Помогите!
  • Вопрос задан
  • 307 просмотров
Подписаться 1 Оценить Комментировать
Решение пользователя Rsa97 К ответам на вопрос (4)
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$params["image_url"] = (isset($array['image_url']) ? $array['image_url'] : NULL);

UPDATE ... `image_url` = IFNULL(:image_url, `image_url`) ...
Ответ написан