Yii2 — почему не сохраняются тэги на странице блога?

Различные вопросы по установке и настройке фреймворка, конфигурции веб-сервера и IDE.
Ответить
Fin
Сообщения: 13
Зарегистрирован: 2017.06.18, 13:28

Yii2 — почему не сохраняются тэги на странице блога?

Сообщение Fin » 2017.07.09, 17:50

В базе данных есть только 2 сохранённых тэга, а 3 не создаётся при 'update' никак(Изображение
Судя по логам- ничего нигде не сохраняется. "Failed to set unsafe attribute 'tags_array' in 'common\models\Blog'"
Возможно, поэтому не срабатывает afterSave если сам save отсутствует? Но как это исправить? Изображение Код Blog.php

Код: Выделить всё

<?php

namespace common\models;

use Yii;
use common\models\Blog;

/**
 * This is the model class for table "blog".
 *
 * @property integer $id
 * @property string $title
 * @property string $text
 * @property string $url
 * @property integer $status_id
 * @property integer $sort
 */
class Blog extends \yii\db\ActiveRecord
{
    public $tags_array;
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'blog';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['title', 'url'], 'required'],
            [['text'], 'string'],
            [['url'], 'unique'],
            [['status_id', 'sort'], 'integer'],
            [['sort'], 'integer','max'=>99, 'min'=>1],
            [['title', 'url'], 'string', 'max' => 150],
            [['$tags_array'], 'safe'],

        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'title' => 'Заголовок',
            'text' => 'Текст',
            'url' => 'ЧПУ',
            'status_id' => 'Статус',
            'sort' => 'Сортировка',
            '$tags_array' => 'Тэги',

        ];
    }

    public static function getStatusList() {
        return ['off','on'];
    }
    public function getStatusName(){
       $list = self::getStatusList();
       return $list[$this->status_id];
    }

    public function getAuthor () {
      return $this->hasOne (User::className(),['id'=>'user_id']);
    
    }

     public function getBlogTag () {
      return $this->hasMany(BlogTag::className(),['blog_id'=>'id']);
    }

      public function getTags()
    {
      return $this->hasMany(Tag::className(),['id'=>'tag_id'])->via('blogTag');
    }

      public function afterFind() 
    {  
       $this->tags_array = $this->tags;
    }

      public function afterSave ($insert, $changedAttributes) 
    {
      parent::afterSave($insert, $changedAttributes);

      $arr = \yii\helpers\ArrayHelper::map($this->tags,'id','id');
      foreach ($this->tags_array as $one) {
       if(!in_array($one,$arr)){
          $model = new BlogTag();
          $model->blog_id = $this->id;
          $model->tag_id = $one;
          $model->save();
      }
    }
  }
}  


Fin
Сообщения: 13
Зарегистрирован: 2017.06.18, 13:28

Re: Yii2 — почему не сохраняются тэги на странице блога?

Сообщение Fin » 2017.07.09, 18:28

Все, нашлась ошибка! В названии свойств без знака доллара нужно указывать. И подключать use ActiveRecord, потому что работать с базой данных

Ответить