请帮助我解决这个问题,非常感谢。
第1部分:数据已更改,我使用[$this->abcModel->save($abc);
],已修改abcTable's
列。 ===>
可以。
第2部分:数据未更改,我也希望更改abcTable's
修改的列,
怎么处理?
(如果给我看一个例子,将会更好地理解。)
使用版本:cakephp 3.3
答案 0 :(得分:1)
答案 1 :(得分:0)
让我们假设您有一个包含以下字段的表单。
Name: XYZ
Number :077777777
**save** button.
它具有表单操作编辑/更新
情况1:用户进行更改并保存表单。 情况2:用户不做任何更改并保存表单。
无论哪种情况,都应调用控制器的edit(或update)函数。 您的姓名和号码字段将在您的控制器中可用,并且可以通过以下方式访问 $ this-> request-> getData()方法。 理想情况下,您将需要两个字段用于时间戳,如下所示: 'CREATED_ON'和'UPDATED_ON'
您可以使用提到的触摸方法,但是在理想情况下,最好将行为写入模型。每当您创建新记录或对记录进行更改/保存时,它都会更新时间戳记。
<?php
namespace App\Model\Behavior;
use Cake\ORM\Behavior\TimestampBehavior;
/**
* Modify built in CakePHP's Timestamp class's default config so no configuration is necessary for use in this project.
*/
final class CustomTimestampBehavior extends TimestampBehavior
{
/**
* Default config
*
* These are merged with user-provided config when the behavior is used.
*
* events - an event-name keyed array of which fields to update, and when, for a given event
* possible values for when a field will be updated are "always", "new" or "existing", to set
* the field value always, only when a new record or only when an existing record.
*
* refreshTimestamp - if true (the default) the timestamp used will be the current time when
* the code is executed, to set to an explicit date time value - set refreshTimetamp to false
* and call setTimestamp() on the behavior class before use.
*
* @var array
*/
protected $_defaultConfig = [
'implementedFinders' => [],
'implementedMethods' => [
'timestamp' => 'timestamp',
'touch' => 'touch',
],
'events' => [
'Model.beforeSave' => [
'CREATED_ON' => 'new',
'UPDATED_ON' => 'existing',
]
],
'refreshTimestamp' => true
];
}
并从模型表中调用它。如下所示:
public function initialize(array $config)
{
parent::initialize($config);
$this
->addBehavior('CustomTimestamp');
这样,您不必每次都手动调用$ this-> model-> touch($ data)。每当它创建或保存时,行为都会处理它。
参考:https://api.cakephp.org/3.0/class-Cake.ORM.Behavior.TimestampBehavior.html