Как сформировать запрос на добавление поста и тегов в 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); } }
Ваша логика по добавлению тегов к посту выглядит немного неправильной. Вместо того, чтобы создавать новый объект модели 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(); } }
Это простой пример, который не учитывает проверку наличия поста и тега перед сохранением. Не забывайте добавить соответствующие проверки для вашей логики при добавлении связей между постами и тегами.
Ваша логика по добавлению тегов к посту выглядит немного неправильной. Вместо того, чтобы создавать новый объект модели 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();
}
}
Это простой пример, который не учитывает проверку наличия поста и тега перед сохранением. Не забывайте добавить соответствующие проверки для вашей логики при добавлении связей между постами и тегами.