2015-04-01 124 views
2

我正在使用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,因爲日期時間字段,現在我想的對象處理。

任何幫助將不勝感激,

保羅

回答

2

你有這樣做的幾種方法。你想要的實際上是避免在保存實體時調用回調。對於這些情況,你有updateAll

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

你也可以做和以前一樣,但是你需要保存之前禁用時間戳行爲:

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

我會建議使用updateAll