CakePHP 3 - 奇怪的行为$ this-> set();设定后受影响

时间:2016-02-02 09:34:16

标签: php cakephp view timestamp entity

今天我发现自己在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视图变量反映了设置变量后执行的触摸变化?

1 个答案:

答案 0 :(得分:4)

来自manual

  

从PHP 5开始,对象变量不包含对象本身   价值了。它只包含允许的对象标识符   用于查找实际对象的对象访问器

实现你想要的你应该做的事情

// set the entity to the $request view variable:
$this->set('request', clone $request);

但也许可以考虑将视图传递给前一个“最后查看”日期而不是整个克隆实体