我在账户工作,我必须增加费用。因此,我在模型
中使用了以下代码public function accounts_entry($type,$ledger_type,$amount,$against,$remarks,$entity_name,$posting_date,
$ref_no,$ref_date,$payment_method,$fiscal_year)
{
$this->account = $ledger_type;
$this->debit = $amount;
$this->credit = 0;
$this->against = $against;
$this->remarks = $remarks;
$this->entity_name = $entity_name;
....
$this->save();
}
对于每个费用条目,我必须在表tabGLEntry中进行两项输入(借方和贷方字段中的值互换)。如果我再次尝试相同的代码,那么将保存最后一个值。我怎样才能保存模型两次。我不想用$model= new Tableglentry ();
在Yii1我可以使用
$this->unsetAttributes();
之后的$this->save();
我可以保存这两个条目。在Yii2中有这样的方式吗? (在Yii2中没有unsetAttributes)
编辑: - 我不想使用新的模型对象。所以我尝试了这个
$this->isNewRecord = true;
if($this->save())
{
$this->setAttributes(['id'=>NULL,'account'=>NULL,'debit' => NULL,'credit'=>NULL,'against' => NULL,
'remarks'=>NULL,'entity_name' => NULL,'posting_date'=>NULL,'reference_no' => NULL,'reference_date'=>NULL,
'payment_method_id' => NULL,'voucher_category'=>NULL,'fiscal_year' => NULL,'voucher_no'=>NULL,'name' => NULL,]);
}
所以我认为它会解决我的问题,但事实并非如此。我收到了这样的错误
Integrity constraint violation
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '8' for key 'PRIMARY'
The SQL being executed was: INSERT INTO `tabGLEntry` (`payment_method_id`, `reference_no`, `reference_date`, `posting_date`, `remarks`, `fiscal_year`, `account`, `debit`, `credit`, `against`, `entity_name`, `voucher_category`, `voucher_no`, `name`, `id`) VALUES (1, '', NULL, '2015-10-28', '3', '2015-2016', 'Cash', '3', '0', 'Sales', 'general', 0, 'IV-1516-16', 'GL69', 8)
只有我的第一个条目被保存,其他条目不是因为两者都获得相同的id值(主键)
答案 0 :(得分:1)
只需创建一个新的模型对象。 See here该函数已被删除,因为在创建时未设置DB的默认值。
您可以将setAttributes用于null,因为它也在上面链接的问题中提到,或者如果需要,可以编写自己的clear方法。
只需使用
$this->setIsNewRecord(true);
$values= [
'account'=>NULL,
'debit' => NULL,
'credit'=>NULL,
'against' => NULL,
'remarks'=>NULL,
'entity_name' => NULL,
'posting_date'=>NULL,
'reference_no' => NULL,
'reference_date'=>NULL,
'payment_method_id' => NULL,
'voucher_category'=>NULL,
'fiscal_year' => NULL,
'voucher_no'=>NULL,
'name' => NULL,
];
//or create a simpler null value array of all safe Attributes with:
$values = array_fill_keys($model->safeAttributes(), null);
// set this values of your safeattributes to null or your new values.
$this->setAttributes($values, $safeOnly = true);
// set the values of your keys (here `id`) to null
$this->setAttribute(['id' => null ], $safeOnly = false);
然后你应该可以再次使用同一型号保存。