【问题标题】:Is there a shorthand way to save a new database record in Yii2 ActiveRecord?在 Yii2 ActiveRecord 中保存新的数据库记录有速记方法吗?
【发布时间】:2019-01-04 02:59:50
【问题描述】:

在使用 Yii2 ActiveRecord 时有没有一种快捷方式来保存新记录?

以下是文档中的一些示例:

$customer = new Customer();
$customer->name = 'Qiang';
$customer->save();

还有……

Yii::$app->db->createCommand()->insert('customer', ['name' => 'Sam'])->execute();

如果有这样的速记方法就好了……

Customer::create(['name' => 'Qiang']);

...但我似乎无法在文档中找到它。想知道我是否遗漏了什么。还是我需要创建自己的自定义 ActiveRecord 类?

【问题讨论】:

    标签: activerecord yii2 shorthand


    【解决方案1】:

    一些丑陋的做事方式

    (new Customer(['name' => 'Qiang',]))->save();
    

    如果需要退回模型

    ($customer = new Customer(['name' => 'Qiang',]))->save();
    

    ".. 或者我需要创建自己的自定义 ActiveRecord 类吗?"

    将是您的案例的好解决方案,但是每次从 Gii 生成模型时,您都不必忘记更改父类

    【讨论】:

    • 或者你可以调整 Gii 模板 ;)
    • @Yupik 是的,也想写一下 =)
    • 啊,太好了!是的,至少这稍微短了一点。感谢您提供有关使用 Gii 进行管理的快速回答和提示。 ?
    【解决方案2】:

    在现实世界中创建记录实际上更复杂,因为save() 不保证记录已保存在数据库中。例如验证可能不通过,记录不会被保存,save() 返回false。根据情况,您可能希望在这种情况下抛出异常,或者不。

    我建议创建工厂类并在其中封装所有必要的条件、异常处理或默认值 - 从长远来看,它会更容易维护。

    $customer = Yii::$app->modelFactory->createCustomer(['name' => 'Qiang']);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      相关资源
      最近更新 更多