laravel eloquent:如果存在,如何更新数据

时间:2017-03-11 09:36:56

标签: php laravel laravel-5

我有一张桌子,里面有user_idrole_id。现在,如果我从下拉列表中选择user_id = 1并从下拉列表中选择role_id = 2并保存它..如果我想将相同的用户设置为另一个角色而不是在表中创建新行,那么下一次...如何在不创建新行的情况下更新它?谁能提出建议?

$roleUser = RoleUser::firstOrNew(
            ['role_id' => $request->Input(['role_id']),
             'user_id' =>$request->Input(['user_id'])] );
            $roleUser->save();

我使用了firstOrNew方法,但它创建了一个新条目而不是更新旧条目。

4 个答案:

答案 0 :(得分:3)

我在更新或创建新记录时使用此源代码。与Laravel 5.2配合良好

如果存在一条记录user_id ==您的user_id =>将更新role_id

否则会为您的user_id

再插入一条记录
$roleUser = RoleUser::updateOrCreate([
    'user_id' => $request['user_id'],
    ], 
    [
        'role_id' => $request['role_id'],
    ]);

答案 1 :(得分:1)

这是一个应该有效的代码。但是,我不太了解您的数据库架构选择。如果用户只能拥有一个角色,为什么不在// change overlays private void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e) { ComboBox combobox = sender as ComboBox; if (combobox != null && MainMap != null) { // show all overlays if (combobox.SelectedIndex == combobox.Items.Count - 1) { foreach (GMapMarker marker in MainMap.Markers) marker.Shape.Visibility = Visibility.Visible; } // show only selected overlay else { foreach (GMapMarker marker in MainMap.Markers) { if (marker.ZIndex == combobox.SelectedIndex) marker.Shape.Visibility = Visibility.Visible; else marker.Shape.Visibility = Visibility.Collapsed; } } currentMarker.Shape.Visibility = Visibility.Visible; } } 表中定义role_id,然后使用users关系?

belongsTo

答案 2 :(得分:1)

所以这里的问题在哪里?

您使用的是firstOrNew方法,类似于firstOrCreate,通常会执行以下操作:

  • 从数据库中选择

  • 如果不存在

  • 插入给定数据

  • 如果使用firstOrNew,您需要->save()来执行查询。

因此如果存在,它将不会更新您的数据。

但是,我认为您正在寻找updateOrCreate方法,它采用两个数组参数,第一个是插入的数据,如果存在,则函数采用两个数组参数来更新您的行。

  

您可能还会遇到要更新的情况   现有模型或创建新模型(如果不存在)。 Laravel提供   updateOrCreate方法,只需一步即可完成此操作。像   firstOrCreate方法,updateOrCreate持久化模型,所以没有   需要调用save():

$roleUser = RoleUser::updateOrCreate(
    // if not exists, insert the following RoleUser data
    ['role_id' => $request->Input(['role_id']),'user_id' =>$request->Input(['user_id'])],
    // otherwise, update RoleUser set role_id = ?
    ['role_id' => $request->Input(['role_id'])]
);

答案 3 :(得分:0)

$roleUser = RoleUser::firstOrNew(array('role_id' => Input::get('role_id'))); $roleUser ->save();

你可以添加多个字段..

例如..

如果有从奥克兰飞往圣地亚哥的航班,请将价格定为99美元。 如果不存在匹配的模型,请创建一个。

$flight = App\Flight::updateOrCreate( ['departure' => 'Oakland', 'destination' => 'San Diego'], ['price' => 99] ); `