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

Как сформировать запрос на добавление поста и тегов в Yii2?

Сохранил запись, получил id записи, формирую запрос на добавление тегов к посту, используя модель Tags, данная модель обратится к моделе PostTag отвественную за сохранение тегов и постов. Сохранение будет производится используя active record.
2 вопроса:
1. Правильная ли логика(Если нет, как правильно) ?
2. В модель Tags есть публичное свойство tags, и с помощью load не получается загрузить данные в модель, с чем это может быть связанно?

if($model->load(Yii::$app->request->post()) && $model->upload($imgFile) && $model->validate() && $model->add()) {

//добавление тегов
//id поста для которого будут теги
$postTagId = Yii::$app->db->getLastInsertID();
//загрузка данных в модель

var_dump(Yii::$app->request->post());
if($tagsModel->load(Yii::$app->request->post()) && $tagsModel->validate() && $tagsModel->save()) {

}

}

----
Модель Tags

class Tags extends Model {
public $tags = array();

/*
* Возвращает массив, индексом колонки является id.
* */
public static function getTagsAsIndexArr() {
return Tag::find()->select(['title', 'id'])->indexBy('id')->column();
}

public function save() {
var_dump($this);
}

}
  • Вопрос задан
  • 345 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Нужны: таблица post с id и таблица tag с id и name + таблица post_tag c id,post_id,tag_id которая их связывает
Создаете в моделе Post публичную переменнтую tags, а дальше в afterSave методе модели пост перебираете tags:
новые сохраняете и связываете, старые отвязываете.
тут будет доступна $this->id. не надо будет вот этот ужас делать -
$postTagId = Yii::$app->db->getLastInsertID();


Если кроме постов теги еще где-то нужны - можно таблицу post_tag сделать универсальнее, добавив поле modul и записывая туда название модуля или $this->className()

Можно пойти дальше и сделать из этого поведение, удобно подключая к любой модели.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы