我有一张桌子,里面有user_id
和role_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方法,但它创建了一个新条目而不是更新旧条目。
答案 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]
);
`