Yii2

时间:2015-10-26 08:30:05

标签: yii2 yii2-advanced-app

我在账户工作,我必须增加费用。因此,我在模型

中使用了以下代码
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值(主键)

1 个答案:

答案 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);

然后你应该可以再次使用同一型号保存。