我需要检查更新后模型状态是什么,以便执行代码。问题是在更新之前很难确定未来状态,在更新之后它很容易确定。
所以我需要以下两件事之一 - 要么: 1)假更新模型(获取更新的模型,但仍未写入DB) 2)真的更新模型,如果我不喜欢结果还原此更新
这些事情中的任何一个都可能吗?
答案 0 :(得分:0)
说到2选项。如果您使用MySQL作为数据层欢迎来到神奇的数据库事务世界。 (http://dev.mysql.com/doc/refman/5.7/en/commit.html)。 Laravel的DB类提供了实现事务方法的特殊方法(http://laravel.com/docs/database#database-transactions)。在你的情况下,它可以这样写:
DB::beginTransaction();
$someInstance->update($data);
if ($someCondition) {
DB::commit();
} else {
DB::rollback();
}
无论如何检查文档,你可能会觉得它很有趣,值得现在。 请注意,MySQL表应该使用事务安全存储引擎(如InnoDB),据我所知,MyISAM引擎不支持事务。