2016-03-02 51 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; 

约定和配置,整齐漂亮。