Если для таблицы rag_restaurant_rel нет идентификатора или идентификатор не имеет значения (AI int или что-то, на что нет ссылок в другом месте), я бы подумал, что самым простым способом было бы стереть таблицу, где restaurant_id = что угодно, а затем просто вставьте все представленные идентификаторы.
Я не очень знаком с CI и не знаю, как вы взаимодействуете с базой данных, поэтому со стороны сценариев у меня не так много информации. Если вы используете MySQL, я считаю, что подготовленные операторы очень эффективны для множественных вставок, так что, возможно, это будет путь. Что касается ООП, опять же, в зависимости от того, как вы взаимодействуете с базой данных, это просто вопрос добавления 1, 2 или 3 методов.
Что-то вроде:
public function updateRestaurantRelations($restId, $tagArray)
{
//called from your script
if($this->wipeCurrentTags($restId)){
if($this->addNewTags($restId, $tagArray)){
return true;
}
}
return false;
}
private function wipeCurrentTags($restId)
{
//perform query here or call delete method
//return true on success and false on failure
}
private function addNewTags($restId, $tagArray)
{
//perform query here or build prepared statement loop here or call insert method
//return true on success and false on failure
}
Опять же, я не знаю, насколько это совместимо с CI.
Вы также можете сначала добавить теги POSTed (или выбрать текущие теги перед удалением), чтобы в случае ошибки при вставке ваша таблица не была очищена от всех тегов, которые уже были в БД ( или вы сможете их восстановить).