255, ], [ [ 'portfolio_id', 'user_id', ], 'unique', 'targetAttribute' => [ 'portfolio_id', 'user_id', ], 'message' => 'The combination of Portfolio ID and User ID has already been taken.', ], [ [ 'portfolio_id' ], 'exist', 'skipOnError' => true, 'targetClass' => Portfolio::className(), 'targetAttribute' => [ 'portfolio_id' => 'portfolio_id' ], ], [ [ 'user_id' ], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => [ 'user_id' => 'id' ], ], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'portfolio_user_id' => Yii::t('app', 'Portfolio User ID'), 'portfolio_id' => Yii::t('app', 'Portfolio ID'), 'user_id' => Yii::t('app', 'User ID'), 'position' => Yii::t('app', 'Должность'), 'time' => Yii::t('app', 'Рабочих часов'), 'status' => Yii::t('app', 'Статус'), 'project' => Yii::t('app', 'Проект'), 'time_from' => Yii::t('app', 'часы от'), 'time_to' => Yii::t('app', 'часы до'), ]; } /** * @return \yii\db\ActiveQuery */ public function getPortfolio() { return $this->hasOne(Portfolio::className(), [ 'portfolio_id' => 'portfolio_id' ]) ->inverseOf('portfolioUsers'); } /** * @return \yii\db\ActiveQuery */ public function getUser() { return $this->hasOne(User::className(), [ 'id' => 'user_id' ]); } public function afterSave($insert, $changedAttributes) { if(!$insert && array_key_exists('status', $changedAttributes)) { $portfolioGallery = PortfolioGallery::find() ->where([ 'portfolio_id' => $this->portfolio_id, 'user_id' => $this->user_id, ]) ->one(); if(empty( $portfolioGallery )) { $gallery = new Gallery([ 'user_id' => $this->user_id, 'name' => $this->portfolio->name, 'cover' => '/images/imageNotFound.jpg', ]); if($gallery->save()) { $portfolioGallery = new PortfolioGallery([ 'gallery_id' => $gallery->gallery_id, 'portfolio_id' => $this->portfolio_id, 'user_id' => $this->user_id, ]); $portfolioGallery->save(); } else { throw new \Exception('Невозможно создать галерею пользователя ' . $this->user_id . ' для проекта ' . $this->portfolio_id); } } } parent::afterSave($insert, $changedAttributes); } public function getPortfolioGallery() { return $this->hasOne(PortfolioGallery::className(), [ 'portfolio_id' => 'portfolio_id', 'user_id' => 'user_id', ]); } public function getGallery() { return $this->hasOne(Gallery::className(), [ 'gallery_id' => 'gallery_id', 'user_id' => 'user_id', ]) ->via('portfolioGallery'); } }