Как сформировать запрос на добавление поста и тегов в 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);
}
}

21 Авг 2019 в 07:04
172 +1
0
Ответы
1

Ваша логика по добавлению тегов к посту выглядит немного неправильной. Вместо того, чтобы создавать новый объект модели Tags и загружать данные в него из $_POST, вам нужно создать новый объект модели PostTag и сохранить его с помощью метода save(). Модель Tags должна использоваться для работы с таблицей тегов, а не для сохранения связей между постами и тегами.

Проблема с load() возможно связана с тем, что форма в представлении не правильно настроена. Убедитесь, что имена элементов формы соответствуют именам атрибутов модели Tags и что правила валидации корректно настроены.

Пример кода для добавления тегов к посту:

if($model->load(Yii::$app->request->post()) && $model->upload($imgFile) && $model->validate() && $model->add()) {
//id поста для которого будут теги
$postId = Yii::$app->db->getLastInsertID();
//Получаем выбранные теги из формы
$selectedTags = Yii::$app->request->post('tags');
//Сохраняем каждый выбранный тег
foreach($selectedTags as $tagId) {
$postTag = new PostTag();
$postTag->post_id = $postId;
$postTag->tag_id = $tagId;
$postTag->save();
}
}

Это простой пример, который не учитывает проверку наличия поста и тега перед сохранением. Не забывайте добавить соответствующие проверки для вашей логики при добавлении связей между постами и тегами.

20 Апр в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 683 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир