У меня небольшая проблема. Я делаю сайт, который имеет теги и вопросы. У меня есть модель Вопроса, модель тега, модель Вопроса, все прекрасно сочетается. Пользователь, спрашивая что-то, помещает теги в поле, разделенное пробелом (foo bar baz), как на stackoverflow.com.
Теперь вот код для проверки того, существует ли уже тег или нет, и ввод тега в базу данных и необходимые ассоциации:
function create () {
if (!empty($this->data)) {
$this->data['Question']['user_id'] = 1;
$question = $this->Question->save ($this->data);
/**
* Preverimo če se je vprašanje shranilo, če se je,
* vprašanje označimo.
*/
if ($question) {
$tags = explode (' ', $this->data['Question']['tags']);
foreach ($tags as $tag){
if (($tagId = $this->Tag->existsByName($tag)) != false) {
/**
* Značka že obstaja, torej samo povezemo trenuten
* id z vprašanjem
*/
$this->QuestionsTag->save (array(
'question_id' => $this->Question->id,
'tag_id' => $tagId
));
}
else {
/**
* Značka še ne obstaja, jo ustvarimo!
*/
$this->Tag->save (array(
'name' => $tag
));
// Sedaj pa shranimo
$this->QuestionsTag->save(array(
'question_id' => $this->Question->id,
'tag_id' => $this->Tag->id
));
$this->Tag->id = false;
}
; }
}
}
}
Проблема в том, что Вопрос имеет идентификатор 1, и я хочу, чтобы он имел теги с идентификатором 1, 2, 3.
Когда вызывается 2-е и 3-е сохранение, Cake видит, что в таблице questions_tags уже есть вопрос с идентификатором 1, поэтому он просто обновляет тег.
Но это не правильно, поскольку в этой таблице должно быть много вопросов с одинаковым идентификатором, поскольку они относятся к разным принадлежащим им тегам.
Итак, есть ли способ предотвратить это? Предотвратить метод сохранения от ОБНОВЛЕНИЯ?
Спасибо!