- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我终于明白这个概念了,因为我仍然没有得到一些案例。
问题 1)save()
返回什么?它总是 bool 值还是有时会抛出异常?
问题 2) 我没有使用任何事件模型。所以我认为 save()
不会在任何时候返回 false。那么它会返回true还是抛出异常?我说得对吗?
问题 3) 如果我有这样的事情:
DB::beginTransaction();
try{
$model1 = new Type();
$model1->test = 'great';
$model1->save();
$model2 = new Type();
$model2->test2 = 'awesome';
$model2->save();
DB::commit();
}catch(Exception $e){
DB::rollBack();
}
是否有可能保存没有发生但没有抛出异常?我在这些模型中没有任何事件。
问题 4) 如果问题 3 的答案是“不,这是不可能的”,那么为什么我需要使用 saveOrFail()
我真的很感激,因为我真的找不到任何可以深刻解释我所问问题的内容。
最佳答案
问题1) save()
确实可以抛出异常。例如,如果您创建一个带有小数列的模型,例如'cost',并尝试在该列中保存字符串值,save()
和 saveOrFail()
都会抛出异常。演示:
>>> $item->cost = 'asdas';
>>> $item->save();
Illuminate/Database/QueryException with message 'SQLSTATE[HY000]: General error: 1366 Incorrect decimal value: 'asdas' for column 'cost' at row 1 (SQL: update ...
问题 2) 浏览 source ,看起来 save()
在触发 saving
、 update
或 时只会返回
事件返回false
创建false
。
由于您尚未定义任何事件监听器,理论上是的,您应该只接收 true
,否则将引发异常。
问题 3) 如果您没有监听事件,那么这是不可能的(至少不可能)。仅当抛出异常时,保存才不会发生。
问题 4) 由于 saveOrFail()
只是将 save()
包装在事务中,因此它的用途是保持数据库一致(如果有)在 save()
函数期间引发异常。 saveOrFail()
确保如果在 save()
期间引发任何异常,模型将不会被保存。如果抛出异常,单独的 save()
无法保证模型不会被修改/保存。
由于您已经将代码包装在事务中,因此不需要使用 saveOrFail
。
对于您的用例,我能想到的最好的方法是在单个 if 表达式中对所有模型调用 save()
,并且仅当表达式为 时才提交事务>真实
。这样,您就可以在 save()
返回 false
或引发异常时同时满足这两种情况。像这样:
DB::beginTransaction();
try {
$model1 = new Type();
$model1->test = 'great';
$model2 = new Type();
$model2->test2 = 'awesome';
if ($model1->save() && $model2->save()) {
DB::commit();
} else {
DB::rollBack();
}
} catch(Exception $e){
DB::rollBack();
}
关于laravel - save 与 saveorfail (简而言之,真正的区别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57494581/
我终于明白这个概念了,因为我仍然没有得到一些案例。 问题 1)save() 返回什么?它总是 bool 值还是有时会抛出异常? 问题 2) 我没有使用任何事件模型。所以我认为 save() 不会在任何
我是一名优秀的程序员,十分优秀!