Как сформировать запрос на добавление поста и тегов в 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
196 +1
1
Ответы
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 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир