2015-04-01 5 views
2

Я работаю над новым проектом с использованием CakePHP 3.0.Сохранить без обновления поля «modified»

Я использую компонент аутентификации, и всякий раз, когда пользователь входит в систему, я обновляю значение поля 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, потому что поля DateTime в настоящее время рассматриваются как объекты, которые я предполагаю.

Любая помощь будет принята с благодарностью,

Paul

ответ

2

У вас есть несколько способов сделать это. На самом деле вам нужно избегать вызова обратных вызовов при сохранении объекта. Для тех случаев, у вас есть updateAll

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

Вы также можете сделать то же самое, как и раньше, но вам нужно будет отключить поведение Timestamp перед сохранением:

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

Я бы рекомендовал использовать updateAll