Каков наилучший способ обновить / добавить / удалить несколько записей в одной и той же форме с помощью CakePHP

#cakephp #cakephp-2.0 #cakephp-2.3 #cakephp-2.1

#cakephp #cakephp-2.0 #cakephp-2.3 #cakephp-2.1

Вопрос:

У меня есть эта таблица тем, которая связана с таблицей Post с помощью hasMany в модели.

Это мой $this-> запрос-> данные

 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);
  

Но что, если бы я также хотел иметь возможность добавлять и удалять сообщения в эту тему, как бы я поступил?

Ответ №1:

Сохраняя ту же структуру, вы можете сделать a $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.
  • если для параметра $cascade установлено значение false, записи рецептов останутся после удаления пользователя.

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

Комментарии:

1. Я не понимаю, как удалить только сообщение (или более одного), но сохранить тему. В контроллере у меня есть доступ только к тематической модели.