使用Yii2 ActiveRecord时是否有保存新记录的简便方法?
以下是文档中的一些示例:
$customer = new Customer();
$customer->name = 'Qiang';
$customer->save();
和...
Yii::$app->db->createCommand()->insert('customer', ['name' => 'Sam'])->execute();
如果有类似...的速记方法,那就太好了
Customer::create(['name' => 'Qiang']);
...但是我似乎在文档中找不到。想知道我是否想念一些东西。还是我需要创建自己的自定义ActiveRecord类?
答案 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']);