public static function save_tags($tag_names, $news_id) { $saved_ids = array(); if (!is_array($tag_names)) { $tag_names = (array) $tag_names; } if (!$tag_names) { return $saved_ids; } $news_tag_ids4delete = self::get_assoc('tag_id', 'id', array('news_id' => $news_id)); $tag_ids = \Model_Tag::get_assoc('name', 'id', array('name', 'in', $tag_names)); foreach ($tag_names as $name) { if (!empty($tag_ids[$name])) { $tag_id = $tag_ids[$name]; } else { $tag = \Model_Tag::forge(array('name' => $name)); $tag->save(); $tag_id = $tag->id; } if (!($news_tag = self::get_one4news_id_and_tag_id($news_id, $tag_id))) { $news_tag = self::forge(array('news_id' => $news_id, 'tag_id' => $tag_id)); $news_tag->save(); $saved_ids[] = $news_tag->id; } if (isset($news_tag_ids4delete[$tag_id])) { unset($news_tag_ids4delete[$tag_id]); } } // delete records if ($news_tag_ids4delete) { foreach ($news_tag_ids4delete as $news_tag_id4delete) { if ($news_tag = self::find($news_tag_id4delete)) { $news_tag->delete(); } } } return $saved_ids; }