保存ActiveRecord模型

时间:2016-03-02 23:10:57

标签: php orm yii2

我在Yii2框架中访问ActiveRecord模型的ID时遇到问题。当我保存刚刚创建的模型时,我无法获取新对象的id字段。

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

$hid = $house->id;

$ hid值为空字符串''。

问题是我正在创建新模型,以便我可以将新的id传递给处理文件移动的线程进程,同时创建数据库行。线程启动,在json切片和数组填充后,第一次插入在sql condition(where)语句中失败。

我研究了许多答案,他们指出了几个缺陷:

  1. 分配pk - 我不分配新的模型id字段(db处理pk自动增量),我通过json接收$ _post主体内容(json有许多字段不用于批量分配到主模型中,所以我在$ attibutes insert)之前处理切片json数据。
  2. pk in model rules - 我在模型规则数组中没有id字段。
  3. ActiveRecord类中的错误 - 我不想破解框架的基类。
  4. 稍后在代码中我计划通过关系链接模型,但我认为由于此错误而失败,所以我也使用$ hid值来填充相关模型中的外键字段。

    帮助。请。

2 个答案:

答案 0 :(得分:1)

可能是以这种方式尝试的验证问题

    $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 

(仅用于调试porpose的save(false))

答案 1 :(得分:-1)

谢谢scaisEdge和Alex。我忘了检查数据库的非空列。 yii2 gii模块根据db模式生成模型,我错过了模型的规则字段。我不需要验证,因为我只是生成空行(只是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;

约定和配置,非常整洁。