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; }
private function kategoriiSlushatelej() { if ($this->_kategoriiSlushatelej === null) { $data = KategoriyaSlushatelya::find()->orderBy('nazvanie')->asArray()->all(); $this->_kategoriiSlushatelej = ArrayHelper::map($data, 'id', 'nazvanie'); } return $this->_kategoriiSlushatelej; }