Как вы можете видеть из предыдущих ответов, есть несколько способов достичь одной и той же цели. Я просто хотел бы немного объяснить, почему ваш путь не сработал.
В модели CakePHP абстрагировал строки базы данных в массив в соответствии с его реализацией ORM . Это дает нам удобный способ манипулирования данными и их изменения в архитектуре MVC.
Когда вы говорите:
$this->Testmodel->set(array(
'created' => '1'
));
Вы имеете дело непосредственно с моделью, но данные на самом деле хранятся в виде массива в переменной класса с именем $ data. Чтобы получить доступ к этим данным и манипулировать ими, вы должны вместо этого сказать:
$this->data['Testmodel']['created'] => '1';
Причиной указания имени модели в качестве первого индекса является то, что там, где были найдены связанные таблицы, к ним можно получить доступ таким же образом, например, вы можете иметь:
Array([Testmodel] => Array ([id] => 1,
[created] => [1],
...
)
[Relatedmodel] => Array ([id] => 1,
[data] => asd,
...
)
)
... и так далее. Очень удобно.
Теперь, когда вы используете $this->
MyModelName
->save()
без параметров, он использует $ this-> data по умолчанию и использует часть массива данных, соответствующую модели, которую вы используете. вызываем метод сохранения. Вы также можете передать массив данных, отформатированный таким же образом, если по какой-то причине вы не (или не можете) использовать $this->data
.
Вы используете метод read () неверно. Первый параметр должен быть пустым, строкой или массивом строк (представляющих имена полей). Второй параметр должен быть идентификатором записи, которую вы хотите прочитать. Вместо этого для параметра 2 вы передаете результат поиска, который будет массивом. Результат, который вы не захватываете, будет пустым.
Я бы написал ваш код как:
$this->data = $this->Testmodel->read('emailaddress',1);
$this->data['Testmodel']['created'] = 1;
$this->Testmodel->save();
или более кратко:
$this->Testmodel->id = 1;
$this->Testmodel->saveField('created', 1);