在Laravel中的findOrCreate

8 浏览
0 Comments

在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当我在数据库中创建已存在的数据时,数据不会被更新。

0
0 Comments

问题出现的原因是在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变量,问题得以解决。

0
0 Comments

问题出现的原因是用户想要在他们的控制器中使用`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`方法的使用说明。

0