CakePHP 3.0时间戳行为

bis0qfac  于 2023-08-05  发布在  PHP
关注(0)|答案(2)|浏览(133)

我想在用户登录时更新用户表中的时间戳。我创建了一个名为'lastLogin'的日期时间字段。
从我的用户控制器的登录操作中,我调用:

$user = $this->Auth->identify();
if ($user) {
     $this->Auth->setUser($user);
     $this->Users->touch($this->Users->get($user['id']), 'Users.afterLogin');
}

字符串
在我的用户表中,我有:

$this->addBehavior('Timestamp', [
    'events' => [
        'Model.beforeSave' => [
            'created' => 'new',
            'modified' => 'always',
        ],
        'Users.afterLogin' => [
            'lastLogin' => 'always'
        ]
    ]
]);


我已经测试了事件被触发并且实体属性正在被更新。但它不会保存到数据库中。
这是故意的,即。我是否必须显式地保存实体,或者我是否遗漏了什么?
谢谢你,谢谢
安德留斯

wfsdck30

wfsdck301#

行为只更新字段

从文档中看不太清楚,但代码只更新字段值。该行为实际上不会更新数据库,它实际上是假设在同一个请求中稍后会有一个保存调用。

30byixjq

30byixjq2#

在Cakephp 3.10中,你可以使用下面的代码(考虑到createdupdated是两个自定义列:

$this->addBehavior('Timestamp', [
        'events' => [
            'Model.beforeSave' => [
                'created' => 'new',
                'updated' => 'always'
            ]
        ]
    ]);

字符串

相关问题