在Laravel中的findOrCreate
在Laravel中的findOrCreate
我想创建数据,但如果数据库中已存在该数据,则更新该数据。但如果数据库中不存在该数据,则创建新数据。\n这是我的控制器\n
public function store(Request $request) { $real = SpentTime::updateOrCreate([ 'plan_id' => $request->get('plan_id') ],[ 'daily_spent_time' => $request->get('daily_spent_time'), 'daily_percentage' => $request->get('daily_percentage'), 'reason' => $request->get('reason') ]); return redirect()->route('real.index', compact('reals')); }
\n这是我的模型\n
public static function updateOrCreate($attributes, $values) { $real = SpentTime::updateOrCreate($attributes, $values); return $real; }
\n当我在数据库中创建已存在的数据时,数据不会被更新。
问题出现的原因是在store方法中调用了findOrCreate方法,但是在findOrCreate方法中使用了未定义的变量$record,导致出现了"Undefined variable: record"的错误。
解决方法是将findOrCreate方法中的$record变量改为$real变量。
修改后的代码如下:
public function store(Request $request) { $real = SpentTime::findOrCreate($request->get('plan_id'),[ 'plan_id' => $request->get ('plan_id'), 'daily_spent_time' => $request->get ('daily_spent_time'), 'daily_percentage' => $request->get ('daily_percentage'), 'reason' => $request->get ('reason') ]); return redirect()->route('real.index', compact( 'reals')); } public static function findOrCreate($plan_id,$data) { $real = static::where('plan_id',$plan_id)->first(); if (is_null($real)) { return static::create($data); } else { return $real->update($data); } }
通过修改$record变量为$real变量,问题得以解决。
问题出现的原因是用户想要在他们的控制器中使用`firstOrNew`方法创建或查找一个名为`name`的用户,然后将`foo`字段的值设置为输入值,并保存该用户。
解决方法是在控制器中添加以下代码:
$user = User::firstOrNew(array('name' => Input::get('name'))); $user->foo = Input::get('foo'); $user->save();
这样就可以实现用户的创建或查找,并将`foo`字段的值设置为输入值。
在这个问题中,没有任何更改,因为没有需要更新的内容。
`firstOrNew`是Laravel内部的函数,可以在文档中的`https://laravel.com/docs/5.7/eloquent#retrieving-single-models`找到相关信息,并查找`firstOrCreate`方法的使用说明。