2016-03-02 62 views
1

我在Yii2框架中訪問ActiveRecord模型的id時遇到問題。當我保存剛剛創建的模型時,我無法獲取新對象的id字段。保存ActiveRecord模型後訪問id

$house = new House; 
$house->save(); 

$hid = $house->id; 

$ hid value is empty string''。

問題是我正在創建新模型,以便我可以將新ID傳遞給處理文件移動的線程進程,同時創建數據庫行。線程啓動,並在json切片和數組填充後,第一次插入失敗的SQL條件(where)語句。

我已經研究很多答案,他們指出幾個缺點:

  1. PK的分配 - 我不分配新模式id字段(DB處理的PK自動遞增),我收到$ _ POST體通過JSON的內容(JSON有很多字段不是批量分配到主模型,所以我處理JSON數據在$ attibutes插入之前切片)。
  2. PK在模型規則 - 我沒有模型規則數組中的ID字段。
  3. ActiveRecord類中的錯誤 - 我不想破解框架的基類。

後來在代碼中,我計劃通過關係來鏈接模型,但是我認爲失敗是因爲這個錯誤,所以我還使用$ hid值填充相關模型中的外鍵字段。

幫助。請。

+2

'save()'return'true'? 嘗試'print_r($ house-> errors);'看看驗證是否失敗。 – Alex

回答

0

可能是這樣

$house = new House; 
    if ($house->validate()) {  
     $house->save(); 

     $hid = $house->id; 
    } else { 

     $errors = $house->errors; 
     var_dump($errors) 
    } 

驗證問題,嘗試如果你看到的var_dump的結果,您的驗證失敗(如:一些必填字段..),你需要改變在適當的驗證規則您房屋模型..

否則你不能用

$house->save(false); //this way the validation is not executed 

嘗試(使用SAVE(假)僅用於調試porpose)

0

謝謝scaisEdge和Alex。我忘了檢查數據庫的非空列。 yii2 gii模塊根據數據庫模式生成模型,我錯過了模型的規則字段。我不需要驗證,因爲我只是生成空行(只是pk)。

這是通過代碼:

$house = new House; 
$house->name = 'name'; [field set as required in model rules array] 
$house->description = 'description'; [field set as required in model rules array] 
$house->save(); 

$hid = $house->id; 

約定和配置,整齊漂亮。