} Event::on(Photo::className(), Photo::EVENT_BEFORE_INSERT, function ($event) { // если это первый кавер, то делаем его основным, // иначе, если этот кавер должен стать основным, сбрасываем is_main у всех предыдущих каверов $photo = $event->sender; if (!$photo->artist->getPhotos()->count()) { $photo->is_main = true; } elseif ($photo->is_main) { Photo::resetIsMain($photo->artist_id); } }); Event::on(Photo::className(), Photo::EVENT_BEFORE_UPDATE, function ($event) { // если этот кавер должен стать основным, сбрасываем is_main у всех предыдущих каверов $photo = $event->sender; if ($photo->is_main) { Photo::resetIsMain($photo->artist_id); } }); Event::on(Photo::className(), Photo::EVENT_BEFORE_DELETE, function ($event) { // если удаляется основной кавер, вместо него основным становится следующий по очереди $photo = $event->sender; if ($photo->is_main) { $newMainPhoto = $photo->artist->getPhotos()->andWhere(['is_main' => 0])->orderBy('id')->limit(1)->one(); if ($newMainPhoto) { $newMainPhoto->is_main = 1; $newMainPhoto->save(); } } }); Event::on(Photo::className(), Photo::EVENT_BEFORE_DELETE, function ($event) { $event->sender->file->delete();