【发布时间】:2014-06-12 12:22:28
【问题描述】:
我正在尝试使用一种形式来创建和更新。两个动作都通过这个方法保存:
public function store() {
$data = Input::all();
$data['company_id'] = Auth::user()->company_id;
$validator = Validator::make($data, Feature::$rules);
if($validator->fails()) {
return Redirect::back()->withErrors($validator)->withInput();
}
Feature::firstOrNew(['id' => Input::get('id')])->update($data);
return Redirect::route('features.index');
}
如何改写这一行:
Feature::firstOrNew(['id' => Input::get('id')])->update($data);
所以它不会先从数据库中获取对象?没有必要这样做;我没有用它做任何事情。如果设置了Input::get('id'),它应该发出一个INSERT,如果没有设置,它应该发出一个UPDATE。
【问题讨论】:
-
深思熟虑:我认为这个“难”与许多缺乏“upsert”概念的数据库直接相关。数据库之间的不一致足以让大多数 ORM 跳过该功能。
-
@fideloper 不必使用
ON DUPLICATE KEY UPDATE样式查询;我们可以在 PHP 端进行分支。虽然在数据库端做会更可靠,但万一有人在你开始编辑和点击保存之间删除了记录。 -
当然,这并不是说这听起来也不可行!