yii2-advanced, сохраняю и записываю картинку к записи в бд.
В имени нужно использовать id, который бд автоинкрементирует после сохранения записи, т.е. получить id до сохранения я не могу.
Вопрос: можно ли так делать и делают ли так вообще?
public function saveCategory()
{
$this->image_url = UploadedFile::getInstance($this, 'image_url');
$dir = "uploads/categories";
if ($this->image_url && $this->validate()) {
$image_url = $this->image_url;
if ($this->save()) {
$name = "$this->id.$image_url->extension";
$this->image_url = $name;
$this->save();
$image_url->saveAs("$dir/$name");
}
}
else {
$model = Categories::findOne($this->id);
if ($model->image_url) {
$this->image_url = $model->image_url;
}
$this->save();
}
return true;
}
Конкретно вот это место:
if ($this->save()) {
$name = "$this->id.$image_url->extension";
$this->image_url = $name;
$this->save();
$image_url->saveAs("$dir/$name");
}
(ответ из комментария)
Сначала сохраняете основную модель, если модель сохранена, получаете ее id
. Потом уже сохраняете картинку с полученным id
.
Больше никак.
Так можно делать и так делают, но это просто дикий ужас и от такого подхода надо отказываться или хотя бы начинать отказываться.
Метод saveCategory()
для чего написан? Метод ради метода? Категория и картинка это разные сущности и их надо хранить в разных таблицах. У категории есть id, name, parent и все, остальные данные (какие бы они не были) к сущности категория не относятся. За уши можно притащить что угодно, но это добавит только ужаса в код.
В данном случае я бы рекомендовал использовать две разные таблицы, а логику сохранения можно и нужно описать в behavior. Используя событие afterSave
сохранить картинку и связать две эти сущности (категорию и картинку) через промежуточную таблицу. Получать данные картинки необходимо через реляцию с использованием метода via()
или метода viaTable()
. Методы для получения с использованием промежуточной таблицы.
Таким образом получится чистая и аккуратная категория, чистая аккуратная картинка. Бихевиор можно прицепить к другой сущности (например раздел) и не будет необходимости писать еще один метод с корявой логикой сохранения и кучей ифов.
Рекомендую изучить или хотя бы познакомиться с принципами SOLID
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Я создал страницу новостей, как обычную страницу с помощью шаблона
Как зашифровать числа например, 1 или 2 было как dFf3 с помощью PHP? нужно зашифровать id пользователя с возможностью расшифровки!
Подскажите,где ошибка и как поправить? Хочу сделать так,чтобы при совпадении с указанным url выводилось одно, при других остальных случаях...
Данный код не отрабатывает, но при использовании программы soupUI и установке Post QueryString все отрабатываетНе могу понять в чем проблема