Article.php 4.04 KB
<?php

namespace common\modules\blog\models;

use common\models\Media;
use common\models\User;
use common\modules\blog\behaviors\Autocomplete;
use Yii;
use yii\db\Query;

/**
 * This is the model class for table "article".
 *
 * @property integer $id
 * @property integer $sort
 * @property string $create_at
 * @property string $update_at
 * @property string $code
 * @property integer $author
 * @property string $tags
 * @property integer $parent_id
 * @property integer $active
 * @property integer $comments
 * @property integer $voting
 *
 * @property Article $parent
 * @property Article[] $articles
 * @property User $author0
 * @property ArticleLang[] $articleLangs
 * @property ArticleMedia[] $articleMedia
 * @property ArticleToCategory[] $articleToCategories
 * @property Media[] $media
 */
class Article extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'article';
    }

    public function behaviors()
    {
        return [
            [
                'class' => Autocomplete::className(),
                'attributes' => [
                    'translit' => ['code'],
                ]
            ]
        ];
    }
    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['sort', 'parent_id', 'active', 'comments', 'voting'], 'integer'],
            [['create_at', 'update_at'], 'safe'],
            [['code'], 'required'],
            [['code', 'tags'], 'string']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'ID'),
            'sort' => Yii::t('app', 'Sort'),
            'create_at' => Yii::t('app', 'Create At'),
            'update_at' => Yii::t('app', 'Update At'),
            'code' => Yii::t('app', 'Code'),
            'author' => Yii::t('app', 'Author'),
            'tags' => Yii::t('app', 'Tags'),
            'parent_id' => Yii::t('app', 'Parent ID'),
            'active' => Yii::t('app', 'Active'),
            'comments' => Yii::t('app', 'Comments'),
            'voting' => Yii::t('app', 'Voting'),
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getParent()
    {
        return $this->hasOne(Article::className(), ['id' => 'parent_id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getArticles()
    {
        return $this->hasMany(Article::className(), ['parent_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getAuthor0()
    {
        return $this->hasOne(User::className(), ['id' => 'author']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getArticleLangs()
    {
        return $this->hasMany(ArticleLang::className(), ['article_id' => 'id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getArticleMedia()
    {
        return $this->hasMany(ArticleMedia::className(), ['article_id' => 'id']);
    }

    public function getMedia()
    {
        return $this->hasMany(Media::className(), ['id' => 'media_id'])->via('articleMedia');
    }
    /**
     * @return \yii\db\ActiveQuery
     */
    public function getArticleToCategories()
    {
        return $this->hasMany(ArticleToCategory::className(), ['article_id' => 'id']);
    }

    public function getArticleCategories()
    {
        return $this->hasMany(ArticleCategory::className(), ['id' => 'category_id'])->viaTable('article_to_category', ['article_id' => 'id']);
    }

    public static function findArticleDropdown($id)
    {
        $query = new Query();
        return $query->select(['l.name', 'a.id'])
            ->from(['article a'])
            ->leftJoin(['article_lang l'], 'a.id = l.article_id')
            ->where(['l.lang_id' => 0, 'a.active' => 1])
            ->andWhere(['not', ['a.id' => $id]])
            ->indexBy('a.id')
            ->column();
    }

    public function getArticleCategoriesArray()
    {
        return $this->getArticleToCategories()->select('category_id')->column();
    }
}