Product.php 2.53 KB
<?php

namespace common\modules\product\models;

use common\modules\rubrication\models\TaxOption;
use Yii;
use common\modules\relation\relationBehavior;
use yii\db\ActiveQuery;

/**
 * This is the model class for table "{{%product}}".
 *
 * @property string $name
 * @property integer $tax_brand_id
 * @property integer $product_id
 *
 * @property TaxOption $categories
 */
class Product extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            [
                'class' => relationBehavior::className(),
                'relations' => [
                    'product_categories' => 'entity1' // Product category
                ]
            ],
        ];
    }

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%product}}';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['tax_brand_id'], 'integer'],
            [['name'], 'string', 'max' => 150],
            [['categories'], 'safe'],
//            [['product_id'], 'exist', 'skipOnError' => true, 'targetClass' => Product::className(), 'targetAttribute' => ['product_id' => 'product_id']],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'product_id' => Yii::t('product', 'Product ID'),
            'name' => Yii::t('product', 'Name'),
            'tax_brand_id' => Yii::t('product', 'Brand'),
            'brand' => Yii::t('product', 'Brand'),
            'categories' => Yii::t('product', 'Categories'), // relation behavior field
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getBrand()
    {
        return $this->hasOne(TaxOption::className(), ['tax_option_id' => 'tax_brand_id']);
    }

    public function getFullName()
    {
        return $this->brandname .' '. $this->name;
    }

    public function getBrandName()
    {
        return $this->getBrand()->one()->valueRenderHTML;
    }

    public function getCategory() {
        /** @var ActiveQuery $categories */
        $categories = $this->getRelations('product_categories');
        $count = $categories->count();
        if ($count == 0)
            return 'None';
        return $categories->one()->ValueRenderFlash . ($count > 1 ? ' + '. $count : '');
    }

    /**
     * @inheritdoc
     * @return ProductQuery the active query used by this AR class.
     */
    public static function find()
    {
        return new ProductQuery(get_called_class());
    }
}