我有一个模型(地址),其中包含以下字段:
id: char(36) #using uuid
name: varchar(150)
#city, state, etc here
created: timestamp
modified: timestamp
在我的AddressesTable类中,我有:
public function initialize(array $config)
{
$this->table('addresses');
$this->addBehavior('Timestamp');
}
在我的控制器中,我在编辑方法中有这个:
public function edit($id = null) {
$addressesTable = TableRegistry::get('Addresses');
$address = $addressesTable->get($id);
if ($this->request->is(array('post','put'))) {
$address = $addressesTable->patchEntity($address, $this->request->data);
if ($addressesTable->save($address)) {
$this->Flash->success('The address has been saved.');
return $this->redirect(['action' => 'addresses']);
} else {
$this->Flash->error('The address could not be saved. Please, try again.');
}
}
$this->set(compact('address'));
}
我遇到的问题是这个。根据我读过的所有内容,这应该更新'记录(它所做的),并更新'修改的' DB中的字段到当前时间戳(它也是如此)。但是,它还会更新创建的时间戳(不应该这样做)。
我在这里缺少什么?
我需要这个只更新修改后的列,而不是更新保存时创建的列。
答案 0 :(得分:2)
我使用CakePHP 3.4遇到了同样的问题。我在我的Model / Table中解决了这个问题:
public function initialize(array $config)
{
$this->addBehavior('Timestamp');
}
此处有更多信息:https://book.cakephp.org/3.0/en/tutorials-and-examples/blog/part-two.html
答案 1 :(得分:-2)
是的,CakePHP会自动为创建和修改的字段执行此操作。
在MySQL中,这些字段的类型应为DATETIME
。