是否有一种简便的方法可以在Yii2 ActiveRecord中保存新的数据库记录?

时间:2018-07-27 03:18:10

标签: activerecord yii2 shorthand

使用Yii2 ActiveRecord时是否有保存新记录的简便方法?

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

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

和...

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

如果有类似...的速记方法,那就太好了

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

...但是我似乎在文档中找不到。想知道我是否想念一些东西。还是我需要创建自己的自定义ActiveRecord类?

2 个答案:

答案 0 :(得分:5)

一些丑陋的做事方式

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

如果您需要退回模型

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

”。还是我需要创建自己的自定义ActiveRecord类?”

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

答案 1 :(得分:2)

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

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

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