2010-02-22 40 views
33

我的調試值設置爲2,它顯示除我需要的所有查詢外的所有查詢。save()返回false,但在CakePHP中沒有錯誤

我有一個Items控制器方法正在調用在User模型(項目屬於關聯用戶)此方法:

function add_basic($email, $password) { 
    $this->create(); 

    $this->set(array(
     'email' => $email, 
     'password' => $password 
    )); 

    if($this->save()) { 
     return $this->id; 
    } 
    else { 
     return false; 
    } 
} 

我已經證實,$email$password被傳遞到函數正確地(和填充了合法數據)。 emailpasswordUser模型中字段的名稱。

我還證實,$this->save()它返回false,但是當我看到這種情況出現的頁面,並沒有被打印在調試查詢,並沒有被拋出的錯誤,所以我不知道什麼出錯了。

關於如何查看錯誤的任何想法,或爲什麼查詢似乎沒有得到執行?

這很奇怪,在此之後,我有另一種模式將數據保存在確切同樣的方式,它會順利結束。

+0

對任何稍後來這裏的人。你幾乎肯定有一個驗證錯誤。如果你不能用這裏的答案中顯示的命令來標識它,只要看看你的模型類中的驗證是否可能是你的違規行爲。 – usumoio 2014-01-24 15:40:17

回答

8

試試這個:

if ($this->save()) { 
    return $this->id; 
} 
else { 
    var_dump($this->invalidFields()); 
    return false; 
} 
+0

很好的回答! – pimbrouwers 2014-03-03 22:59:43

41

這將可能給你所需要的信息(假設它不節能,因爲無效的數據,當然):

if(!$this->save()){ 
    debug($this->validationErrors); die(); 
} 
+6

+1驗證失敗幾乎總是我自己保存失敗時的原因。如果您忘記明確檢查您的驗證,那麼失敗看起來像是一個完整的幻影。 – 2010-02-23 00:38:27

+8

其實在CakePHP 1.3中,你應該使用debug($ this-> ModelName-> invalidFields()); – 23kulpamens 2012-08-21 18:45:16

+0

@ 23kulpamens - 記下我的答案日期;) – inkedmn 2012-08-21 20:01:05

10

你有一個beforeValidate()或模型或應用模型中的beforeSave()方法?如果他們迴歸真實?如果沒有,請使用調試器,在您的IDE中的Cake/libs/models/model.php save()方法的頂部設置一個斷點,並逐步執行代碼,直到它返回false。如果失敗,則添加die('here');調用。

+0

神聖煙!這讓我難住,但你救了一天!謝謝;之前我不知道Save()必須返回true。我很困惑,因爲CakePHP沒有返回單個驗證錯誤,甚至嘗試插入數據庫。 – 2011-09-17 16:44:48

+0

這也是我的問題。 :) – 2012-01-23 21:07:10

11

包含validationErrors陣列

if ($this->save()) { 
    return $this->ModelName->id; 
} 
else { 
    debug($this->ModelName->invalidFields()); 
    return false; 
} 
+0

從來不知道無效字段,這幫了我,我是傾銷驗證錯誤,但它是空的。 – alistaircol 2018-01-18 14:16:15

2

請一定要檢查你的表:

  • 是否ID已經啓用自動遞增?
  • 是您的主鍵是id

auto_increment問題讓我失望。 簡單的方法來檢查:如果您的任何行有ID = 0,auto_increment可能被禁用。

0

CakePHP未能報告任何$this->Model->validationErrors並且沒有其他錯誤的其他情況可能在$this->request->data沒有像Cake期望的那樣,並且僅僅是忽略了您的數據,而不是保存,沒有驗證錯誤。例如,如果您的數據是由DataTables提供的,您可能會看到這種格式$this->request->data[0]['Model']['some_field']

$this->Model->save($this->request->data[0])會起作用。

相關問題