在 Laravel 'update' 函数上,如何解析 JSON 对象,并用 ForEach 循环存储它
On a Laravel 'update' function, how to parse a JSON object, and store it with a ForEach loop
我正在使用 Laravel 框架来处理我的 MySQL 数据库,目前想从一个 JSON 对象更新我的数据库,该对象将从其他地方发送。
目前,我拥有与我的'Store'功能相同的功能,这显然是行不通的,因为它会更新所有内容,或者因为缺少信息而拒绝工作。
这是我目前拥有的 for each,它不起作用,但我不知道如何最好地用 for-each 解析 JSON,然后存储它。
public function update(Request $request,$student)
{
$storeData = User::find($student);
foreach ($request as $value) {
$storeData-> username = $value;
}
这是我的商店功能,包含前端团队可能以 JSON 格式发送的所有信息。
$storeData->username=$request->input('username');
$storeData->password=$request->input('password');
$storeData->email=$request->input('email');
$storeData->location=$request->input('location');
$storeData->role=DB::table('users')->where('user_id', $student)->value('role');
$storeData->devotional_id=$request->input('devotional_id');
$storeData->gift_id=$request->input('gift_id');
$storeData->save();
return dd("Info Recieved");
您可以将 JSON 对象转换为数组,然后在新数组上执行 foreach 循环。要更新 Laravel 中的 table,它是更新 ($storeData->update();
) 而不是保存。保存就是插入。
$Arr = json_decode($request, true);
您可以像下面的代码片段一样编写方法。
此外,假设您正在使用 laravel API,因此您不需要解析传入的 JSON 输入,但您将在请求对象。
但是,您应该使用 filled
方法来确定该字段是否存在并具有值,否则更新函数将覆盖空值。
我刚刚将这个方法添加到第一个输入,但如果您不确定前端将传递什么,则必须在每个输入中使用它。
public function update(Request $request, $student)
{
$storeData = User::find($student); // should be id
if ($request->filled('username')) { // use this for other items also
$storeData->username = $request->input('username');
}
$storeData->password = $request->input('password');
$storeData->email = $request->input('email');
$storeData->location = $request->input('location');
$storeData->role = DB::table('users')->where('user_id', $student)->value('role');
$storeData->devotional_id = $request->input('devotional_id');
$storeData->gift_id = $request->input('gift_id');
$storeData->update();
dd("Info Recieved");
}
为什么他们会在 post 中从前端发送 json 数据?
真的,它会来自表单输入。就像 Rinto 所说的那样,它将是请求对象。
$user->username = $request->user_name;
我收集到这是用于创建新用户的前面的表单。为什么不使用在寄存器区域为您设置的内置身份验证脚手架?
所以我个人会使用...
//look up user that matches the email or create a new user
$user = User::firstOrNew(['email' => request('email')]);
//add other input values here
$user->name = request('name');
//save
$user->save();
当问题在您正在做的事情中有点含糊时,很难给出确切的答案。 Laravel中有很多方法可以完成事情。从您的代码来看,它看起来像是注册。此外,我在您的代码中看到的一个大陷阱是您传递的是纯文本密码,然后将该密码以纯文本形式添加到您的数据库中。这是一个很大的安全漏洞。
我正在使用 Laravel 框架来处理我的 MySQL 数据库,目前想从一个 JSON 对象更新我的数据库,该对象将从其他地方发送。
目前,我拥有与我的'Store'功能相同的功能,这显然是行不通的,因为它会更新所有内容,或者因为缺少信息而拒绝工作。
这是我目前拥有的 for each,它不起作用,但我不知道如何最好地用 for-each 解析 JSON,然后存储它。
public function update(Request $request,$student)
{
$storeData = User::find($student);
foreach ($request as $value) {
$storeData-> username = $value;
}
这是我的商店功能,包含前端团队可能以 JSON 格式发送的所有信息。
$storeData->username=$request->input('username');
$storeData->password=$request->input('password');
$storeData->email=$request->input('email');
$storeData->location=$request->input('location');
$storeData->role=DB::table('users')->where('user_id', $student)->value('role');
$storeData->devotional_id=$request->input('devotional_id');
$storeData->gift_id=$request->input('gift_id');
$storeData->save();
return dd("Info Recieved");
您可以将 JSON 对象转换为数组,然后在新数组上执行 foreach 循环。要更新 Laravel 中的 table,它是更新 ($storeData->update();
) 而不是保存。保存就是插入。
$Arr = json_decode($request, true);
您可以像下面的代码片段一样编写方法。
此外,假设您正在使用 laravel API,因此您不需要解析传入的 JSON 输入,但您将在请求对象。
但是,您应该使用 filled
方法来确定该字段是否存在并具有值,否则更新函数将覆盖空值。
我刚刚将这个方法添加到第一个输入,但如果您不确定前端将传递什么,则必须在每个输入中使用它。
public function update(Request $request, $student)
{
$storeData = User::find($student); // should be id
if ($request->filled('username')) { // use this for other items also
$storeData->username = $request->input('username');
}
$storeData->password = $request->input('password');
$storeData->email = $request->input('email');
$storeData->location = $request->input('location');
$storeData->role = DB::table('users')->where('user_id', $student)->value('role');
$storeData->devotional_id = $request->input('devotional_id');
$storeData->gift_id = $request->input('gift_id');
$storeData->update();
dd("Info Recieved");
}
为什么他们会在 post 中从前端发送 json 数据?
真的,它会来自表单输入。就像 Rinto 所说的那样,它将是请求对象。
$user->username = $request->user_name;
我收集到这是用于创建新用户的前面的表单。为什么不使用在寄存器区域为您设置的内置身份验证脚手架?
所以我个人会使用...
//look up user that matches the email or create a new user
$user = User::firstOrNew(['email' => request('email')]);
//add other input values here
$user->name = request('name');
//save
$user->save();
当问题在您正在做的事情中有点含糊时,很难给出确切的答案。 Laravel中有很多方法可以完成事情。从您的代码来看,它看起来像是注册。此外,我在您的代码中看到的一个大陷阱是您传递的是纯文本密码,然后将该密码以纯文本形式添加到您的数据库中。这是一个很大的安全漏洞。