hasMany(ExpositionsTagsExpositions::class, ['exposition_id' => 'id']); } public function getObjectList() { return $this->hasMany(ExpositionsObjects::class, ['exposition_id' => 'id']); } public function getTagList() { $selected = []; foreach ($this->expositionsTags as $expositionsTag) { $selected[] = $expositionsTag->exposition_tag_id; } $tags = []; foreach (ExpositionsTags::find()->all() as $objectTemplate) { $tags[] = [ 'id' => $objectTemplate->id, 'name' => $objectTemplate->name, 'selected' => in_array($objectTemplate->id, $selected) ? 'selected' : '' ]; } return $tags; } public function updateExpositionTags($tag_list = []) { $related = ExpositionsTagsExpositions::find()->where(['exposition_id' => $this->id])->all(); $remain = []; foreach ($related as $etx) { if(in_array($etx->id, $tag_list)) { $remain[] = $etx->id; } else { $etx->delete(); } } foreach ($tag_list as $id) { if(!in_array($id, $remain)) { $new = new ExpositionsTagsExpositions(); $new->exposition_id = $this->id; $new->exposition_tag_id = $id; $new->save(); } } } }