保存而不更新修改后的'领域

时间:2015-04-01 07:58:30

标签: cakephp cakephp-3.0

我正在使用CakePHP 3.0开发一个新项目。

我使用身份验证组件,每当用户登录时,我都会更新字段visited的值。

UsersController:

public function login() {

    if ($this->request->is('post')) {

        $user = $this->Auth->identify();

        if ($user) {

            $this->Auth->setUser($user);

            $this->Users->setVisited($user['id']);

            return $this->redirect($this->Auth->redirectUrl());

        }

    $this->Flash->error('Your username or password is incorrect.');

    }

}

UsersTable:

public function setVisited($id) {

    $user = $this->findById($id)->first();

    $user->visited = Time::now();

    if($this->save($user)) {

        return true;

    }

    return false;

}

现在,我想在不更新字段modified的值的情况下执行此操作。我尝试过以前版本的蛋糕中使用的方法:

$user->modified = false;

它没有工作,抛出和错误:Call to a member function format() on a non-object因为我认为日期时间字段现在被视为对象。

非常感谢任何帮助,

1 个答案:

答案 0 :(得分:3)

你有几种方法可以做到这一点。你想要的实际上是避免在保存实体时调用回调。对于这些情况,您有updateAll

$this->updateAll(['visited' => Time::now()], ['id' => $id]);

您也可以像以前一样做,但在保存之前需要禁用时间戳行为:

$this->behaviors()->unload('Timestamp');

我建议使用updateAll