示例#1
0
 private function saveInternal()
 {
     parent::save(false);
     $this->unlinkAll('kategorii_slushatelej_rel', true);
     // user select
     foreach ($this->kategorii_slushatelej as $id) {
         /* @var $kat KategoriyaSlushatelya */
         if ($kat = KategoriyaSlushatelya::findOne($id)) {
             $this->link('kategorii_slushatelej_rel', $kat);
         }
     }
     // user input
     if (isset($this->kategorii_slushatelej_input)) {
         foreach ($this->kategorii_slushatelej_input as $name) {
             $kat = new KategoriyaSlushatelya();
             $kat->nazvanie = $name;
             $kat->save();
             $this->link('kategorii_slushatelej_rel', $kat);
         }
     }
     //garbage-collect unused kategorii
     $unusedKats = KategoriyaSlushatelya::find()->select('kategoriya_slushatelya.id')->leftJoin('kategoriya_slushatelya_kursa', 'kategoriya_slushatelya.id = kategoriya_slushatelya_kursa.kategoriya_slushatelya')->where(['kategoriya_slushatelya_kursa.kategoriya_slushatelya' => null])->groupBy('kategoriya_slushatelya.id');
     foreach ($unusedKats->asArray()->batch() as $rows) {
         KategoriyaSlushatelya::deleteAll(['id' => array_filter($rows)]);
     }
     return true;
 }