今天我发现自己在CakePHP中发现了一个奇怪的行为。
我想要归档的是更新数据库中的列以反映上次查看的日期。当使用不同的列然后使用标准时间戳事件(如创建,修改等)时,可以使用'touch()'来完成此操作。
我在这里看到的奇怪行为是:在我将实体设置为视图变量并更新触摸“最后查看”日期后,设置视图变量中的数据反映了此更改。
将实体设置为视图的代码:
// get the request entity with the ID:
$request = $this->Requests->get($request_id);
// set the entity to the $request view variable:
$this->set('request', $request);
// finally update the last viewed date (database column name: 'opened'):
$this->Requests->touch($request, 'Requests.opened');
$this->Requests->save($request);
为什么$ request视图变量反映了设置变量后执行的触摸变化?
答案 0 :(得分:4)
从PHP 5开始,对象变量不包含对象本身 价值了。它只包含允许的对象标识符 用于查找实际对象的对象访问器
实现你想要的你应该做的事情
// set the entity to the $request view variable:
$this->set('request', clone $request);
但也许可以考虑将视图传递给前一个“最后查看”日期而不是整个克隆实体