【问题标题】:New record isn't saved and no error messages新记录未保存且没有错误消息
【发布时间】:2013-04-02 17:45:38
【问题描述】:

我正在尝试将新行保存到引用中,但 Yii 不保存 QuoteRow。它只保存新服务(是的,数据库结构有点奇怪)。我似乎无法弄清楚。如果该行没有被保存, $qr->save() 应该返回 false 但它没有。服务已成功插入,但报价行没有。

$service = new Services;
$service->label = $row['title'] ?: "Övrigt";
$service->is_priced_per_unit = 1;
$service->price_per_unit = $row['price']*0.8;
$service->is_default = 0;
$service->rot_deductable = (int)isset($row['rot']);
$service->rot_deduction_percentage = 0.5;
if (!$service->save()) $this->addError('Kunde inte spara raden',$service->getErrors());
    else{
    $qr = new QuoteRows;
    $qr->quote_service_id = Yii::app()->db->getLastInsertID();
    $qr->quote_id = $id;
    $qr->unit_size = $row['amount'] ?: 0;
    $qr->raw_price = $row['price']*0.8*($row['amount'] ?: 1);
    $qr->is_rot_deductable = isset($row['rot']) ? 1 : 0;
    $qr->is_active = 1;

    if (!$qr->save()) $this->addError('Kunde inte spara raden',$qr->getErrors());
}

如果 $qr 没有保存,我应该得到错误。我还尝试使用 validate-function 来验证 $qr,它声称它是完全有效的!

【问题讨论】:

  • 仅仅因为它通过了 Yii 的验证并不意味着插入时没有 mysql 错误。你检查过你的错误日志吗?是否启用了调试模式?
  • Pitchinnate - 这是否意味着 save() 会隐藏 SQL 错误?

标签: php activerecord yii


【解决方案1】:

要么使用调试模式,要么在模型中使用带有 print_r($model) 的 beforeValidate、beforeSave 方法;

如果所有属性都设置好了,应该保存新数据;很明显有些东西不见了。

【讨论】:

  • 我只是试图注释掉 ActiveRecord 部分并运行 SQL 查询,结果却完全相同。但是,如果我在执行 SQL 查询的部分之前执行“die($sql)”,然后使用打印的 SQL 查询并手动对我的数据库运行它就可以了……我从来没有之前遇到过这样的问题,感觉就像 db-connection 进入了某种阶段,它完全停止工作,并且日志什么也没显示
  • 可能你的应用没有连接到数据库;它发生在我身上一次,我不知道是怎么回事,但我不得不强制连接;此外,Yii::app()->db->getLastInsertID(); 可能无法正常工作;数据库上可能会发生很多事情
【解决方案2】:

我有同样的问题,但我忘记了 beforSave 方法。它返回 false 但我没有设置任何错误。所以getErrors方法的返回数组是空的。

【讨论】:

    【解决方案3】:

    确保你的 beforeSave、afterSave 函数返回 true

    【讨论】:

      【解决方案4】:

      您在同一个控制器中使用了两个模型。最好在“服务模型”中公开将“报价行”中的所有字段导入“服务”。在保存的同时使用 POST 方法获取值并通过 QuoteRows 模型保存。您也可以在“服务模型”中添加验证条件。

      【讨论】:

        【解决方案5】:

        您可能在模型中使用了一个不返回 true 的事件。例如public function beforeSave() {....... return true;//must return true after everything}

        【讨论】:

          猜你喜欢
          • 2021-07-19
          • 1970-01-01
          • 2022-06-28
          • 1970-01-01
          • 2015-01-05
          • 2016-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多