gpt4 book ai didi

当应该插入 HasAndBelongsToMany 模型时,CakePHP 正在更新

转载 作者:行者123 更新时间:2023-12-04 06:58:22 24 4
gpt4 key购买 nike

我有一个小问题。我正在制作一个有标签和问题的网站。我有一个 Question 模型、Tag 模型、QuestionsTag 模型,一切都很好地结合在一起。用户在询问某事时将标签放在由空格(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;
}
; }
}
}
}

问题是这样的,一个问题的 id 为 1,我希望它有 id 为 1、2、3 的标签。

当第二次和第三次保存被调用时,Cake 看到 questions_tags 表中已经有一个 id 为 1 的问题,所以它只是更新了标签。

但这是不正确的,因为该表中应该有许多具有相同 id 的问题,因为它们引用了属于它们的不同标签。

那么,有没有办法防止这种情况发生呢?防止保存方法更新?

谢谢!

最佳答案

此行为并非特定于 HABTM 关系。您调用save()循环内的方法。第一次保存后,id value 被设置并且每个后续的保存调用都会看到 id 并假设它是一个更新。在一个循环中,您首先需要调用 model->create()重置可能存在的 id 值。

来自于 http://book.cakephp.org/view/75/Saving-Your-Data 的 CakePHP 文档:

When calling save in a loop, don't forget to call create().



在您的情况下,它看起来像这样:
$this->QuestionsTag->create();
$this->QuestionsTag->save (array(
'question_id' => $this->Question->id,
'tag_id' => $tagId
));

关于当应该插入 HasAndBelongsToMany 模型时,CakePHP 正在更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2266382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com