Event::on(Cover::className(), Cover::EVENT_BEFORE_INSERT, function ($event) { // если это первый кавер, то делаем его основным, // иначе, если этот кавер должен стать основным, сбрасываем is_main у всех предыдущих каверов $cover = $event->sender; if (!$cover->release->getCovers()->count()) { $cover->is_main = true; } elseif ($cover->is_main) { Cover::resetIsMain($cover->release_id); } }); Event::on(Cover::className(), Cover::EVENT_BEFORE_UPDATE, function ($event) { // если этот кавер должен стать основным, сбрасываем is_main у всех предыдущих каверов $cover = $event->sender; if ($cover->is_main) { Cover::resetIsMain($cover->release_id); } }); Event::on(Cover::className(), Cover::EVENT_BEFORE_DELETE, function ($event) { // если удаляется основной кавер, вместо него основным становится следующий по очереди $cover = $event->sender; if ($cover->is_main) { $newMainCover = $cover->release->getCovers()->andWhere(['is_main' => 0])->orderBy('id')->limit(1)->one(); if ($newMainCover) { $newMainCover->is_main = 1; $newMainCover->save(); } } }); Event::on(Cover::className(), Cover::EVENT_BEFORE_DELETE, function ($event) { $event->sender->file->delete(); });
/** * @return \yii\db\ActiveQuery */ public function getCovers() { return $this->hasMany(Cover::className(), ['release_id' => 'id']); }