mpe*_*pen 12 php laravel laravel-4
我正在尝试使用一个表单进行创建和更新.两种操作都通过此方法保存:
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');
}
Run Code Online (Sandbox Code Playgroud)
我该如何重写这一行:
Feature::firstOrNew(['id' => Input::get('id')])->update($data);
Run Code Online (Sandbox Code Playgroud)
所以它不首先从数据库中获取对象?没有必要; 我没有做任何事情.它应该发出一个INSERTif Input::get('id')设置,或者UPDATE如果不设置.
Kei*_*day 32
这是我使用的:
Model::updateOrCreate(
['primary_key' => 8],
['field' => 'value', 'another_field' => 'another value']
);
Run Code Online (Sandbox Code Playgroud)
第二个参数是要保存的模型的数据数组.
Vla*_*sny 10
如果您的模型中所有字段都没有防范,我认为您可以这样做:
$feature = new Feature($data);
$feature->exists = Input::has('id');
$feature->save();
Run Code Online (Sandbox Code Playgroud)
如果你有一些守卫的领域,那么你可以先保护它:
$feature = new Feature();
$feature->unguard();
$feature->fill($data);
$feature->exists = Input::has('id');
$feature->reguard();
$feature->save();
Run Code Online (Sandbox Code Playgroud)
的reguard(),如果你没有做任何其他与该模型实际上不需要调用.
小智 6
我曾经遇到过这个问题,并在Laravel上创建了一个可以使用的拉取请求.请尝试下面的代码.你基本上需要的方法是findOrNew.
public function store($id=0)
{
$user = User::findOrNew($id);
$data = Input::all();
if (!$user->validate($data)) {
return Redirect::back()->withInput()->withErrors($user->errors);
}
$user->fill($data);
$user->save();
return Redirect::to('/')->with('message','Record successfully saved!');
}
Run Code Online (Sandbox Code Playgroud)
我的模型使用自我验证,但您可以像现在一样创建自己的验证.
根据主键ID查找或新建
$data = Input::all();
$user = User::findOrNew($id); // if exist then update else insert
$user->name= $data['user_name'];
$user->save();
Run Code Online (Sandbox Code Playgroud)
基于非主要单一字段的First或New
$user = User::firstOrNew(['field' => $data['value'] ]);
$user->name= $data['user_name'];
$user->save();
Run Code Online (Sandbox Code Playgroud)
First或New基于非主键多字段
$user = User::firstOrNew([
'field1'=>$data['value1'],
'field2'=>$data['value2']
]);
$user->name= $data['user_name'];
$user->save();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33660 次 |
| 最近记录: |