Проблема codeigniter - группа флажков - PullRequest
1 голос
/ 14 мая 2011

Я довольно новичок в OOPHP и CI, поэтому у меня был быстрый вопрос, который мог бы быть простым ответом для некоторых людей.

У меня сейчас есть форма с около 100 флажками с одинаковыми именами, поэтому они будут представлены в виде массива чисел.

У меня также есть таблица с именем tag_restaurant_rel, которая является реляционной таблицей, настроенной как InnoDB, и оба значения restaurant_id и tag_id являются внешними ключами, относящимися к соответствующим столбцам в двух других таблицах.

Форма будет отправлена ​​с 1 restaurant_id и несколькими tag_id.

В таблице tag_restaurant_rel есть запись для каждого tag_id в массиве с одинаковым restaurant_id из формы.

Что мне нужно сделать, так это чтобы форма была отправлена, и в зависимости от массива значений флажков таблица tag_restaurant_rel должна будет удалить записи, которых нет в массиве, и создать новую запись для каждого tag_id в массиве.

Мне больше всего интересно узнать, как наиболее эффективно использовать этот стиль ООП и CI.

1 Ответ

2 голосов
/ 14 мая 2011

Если для таблицы 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 (или выбрать текущие теги перед удалением), чтобы в случае ошибки при вставке ваша таблица не была очищена от всех тегов, которые уже были в БД ( или вы сможете их восстановить).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...