ArticleCategory.php 3.34 KB
<?php

namespace common\modules\blog\models;

use common\modules\blog\behaviors\Autocomplete;
use Yii;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\db\Query;

/**
 * This is the model class for table "article_category".
 *
 * @property integer $id
 * @property integer $active
 * @property integer $sort
 * @property string $code
 * @property string $created_at
 * @property string $updated_at
 * @property string $tags
 * @property integer $parent_id
 *
 * @property Article[] $articles
 * @property ArticleCategory $parent
 * @property ArticleCategory[] $articleCategories
 * @property ArticleCategoryLang[] $articleCategoryLangs
 * @property ArticleCategoryMedia[] $articleCategoryMedia
 */
class ArticleCategory extends ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'article_category';
    }

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

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'ID'),
            'active' => Yii::t('app', 'Active'),
            'sort' => Yii::t('app', 'Sort'),
            'code' => Yii::t('app', 'Code'),
            'created_at' => Yii::t('app', 'Created At'),
            'updated_at' => Yii::t('app', 'Updated At'),
            'tags' => Yii::t('app', 'Tags'),
            'parent_id' => Yii::t('app', 'Parent ID'),
        ];
    }

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

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

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

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

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

    public static function findArticleCategoryDropdown($id)
    {
        $query = new Query();
        return $query->select(['l.name', 'c.id'])
                        ->from(['article_category c'])
                        ->leftJoin(['article_category_lang l'], 'c.id = l.category_id')
                        ->where(['l.lang_id' => 0, 'c.active' => 1])
                        ->andWhere(['not', ['c.id' => $id]])
                        ->indexBy('id')
                        ->column();
    }

}