В базу записываются строки, и путь к картинке.
скрипт загрузки картинки:
<?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('Ошибка редактирования категории');
}
}
Но это же трэш. Помогите!