'0', ], [ [ 'specialization_name' ], 'required', ], [ [ 'specialization_name', 'image', 'background', ], 'string', 'max' => 255, ], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'specialization_id' => Yii::t('app', 'specialization_id'), 'specialization_pid' => Yii::t('app', 'specialization_pid'), 'specialization_name' => Yii::t('app', 'specialization_name'), 'specialization_parent_name' => Yii::t('app', 'specialization_parent_name'), 'image' => Yii::t('app', 'image'), 'background' => Yii::t('app', 'background'), 'status' => Yii::t('app', 'status'), ]; } public static function specializationsList() { $specializationArray = [ ]; $specialization = Specialization::find() ->where([ 'specialization_id' => Specialization::find() ->select('specialization_id') ->andWhere('specialization_pid != 0') ->column(), ]) ->all(); foreach(ArrayHelper::index($specialization, 'specialization_id') as $spec) { $array = $spec->hasChildrenInArray($specialization); if($array) { $specializationArray[ $spec->specialization_name ] = $array; } } return $specializationArray; } public function getParent() { return $this->hasOne(self::className(), [ 'specialization_id' => 'specialization_pid' ]); } public function getChildren() { return $this->hasMany(self::className(), [ 'specialization_pid' => 'specialization_id' ]); } public function hasChildrenInArray($array) { $array = ArrayHelper::map($array, 'specialization_id', 'specialization_name', 'specialization_pid'); if(isset( $array[ $this->specialization_id ] )) { return $array[ $this->specialization_id ]; } else { return false; } } public function getStack() { $stack[] = $this->specialization_id; if(!empty( $this->children )) { foreach($this->children as $child) { $stack[] = $child->specialization_id; if(!empty( $child->children )) { $stack = array_merge($stack, ArrayHelper::getColumn($child->children, 'specialization_id', false)); } } } return $stack; } /** * @return ActiveQuery */ public static function getSorted() { return self::find() ->with([ 'children' => function($query) { /** * @var ActiveQuery $query */ $query->orderBy('specialization_name'); }, ]) ->with([ 'children.children' => function($query) { /** * @var ActiveQuery $query */ $query->orderBy('specialization_name'); }, ]) ->where([ 'specialization_pid' => 0 ]) ->orderBy('specialization_name'); } }