【问题标题】:What is the best way to Update/Add/Delete multiple records in the same form with CakePHP使用 CakePHP 以相同形式更新/添加/删除多条记录的最佳方法是什么
【发布时间】:2016-10-18 15:49:52
【问题描述】:

我有这个主题表,该表链接到模型中带有 hasMany 的表 Post。

这是我的 $this->request->data

Array
(
[Topic] => Array
    (
        [id] => 1
        [topic_title] => This is my topic
    )

[Post] => Array
    (
        [1] => Array
            (
                [id] => 1
                [title] => Blah
                [message] => My message
            )

        [2] => Array
            (
                [id] => 2
                [title] => Second Blah
                [message] => Second My message
            )

    )

)

我更新它:

$this->Topic->saveAssociated($this->request->data);

但是,如果我还希望能够添加和删除该主题的帖子,我将如何进行?

【问题讨论】:

    标签: cakephp cakephp-2.0 cakephp-2.3 cakephp-2.1


    【解决方案1】:

    保持相同的结构,您可以执行 $this->Topic->saveAssociated($this->request->data);,它会在数据数组中添加任何新的('id' => NULL 或未设置的)项目。

    关于删除,我知道唯一会同时删除的情况是 HABTM,它被标记为 'unique' => true。否则,你需要做一个$this->Post->deleteAll(array('Post.topic_id' => $unwanted_topic_id), false);

    我可以考虑创建一个新数组,保留要删除的数组并将它们作为 deleteAll 函数的条件发送。

    【讨论】:

      【解决方案2】:

      来自 CakePHP 2 书

      delete(integer $id = null, boolean $cascade = true);
      

      删除由 $id 标识的记录。默认情况下,也会删除记录 取决于指定要删除的记录。

      例如,当删除与多个配方相关联的用户记录时 记录(用户“hasMany”或“hasAndBelongsToMany”食谱):

      • 如果 $cascade 设置为 true,如果模型的依赖值设置为 true,相关的 Recipe 记录也会被删除。
      • 如果 $cascade 设置为 false,则配方记录将在用户被删除后保留。

      http://book.cakephp.org/2.0/en/models/deleting-data.html

      【讨论】:

      • 我不明白如何只删除一个帖子(或多个帖子)但保留主题。在控制器中,我只能访问主题模型。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多