因此,我试图悬挂大量的laravel HTTP请求,并在发送包含JSON正文的发布请求时遇到错误...
当我第一次尝试时,使用与对URL附加了参数的帖子请求相同的代码时出现错误...
我的商店功能
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|string',
'details' => 'required|string',
'completed' => 'required',
'modified' => 'required'
]);
$user = Auth::id();
$userDetails = UserDetailModel::find(1)->UserDetailId;
$todo = new UserTodoModel;
$todo->UserDetailId = $userDetails;
$todo->Title = $request->title;
$todo->Details = $request->details;
$todo->completed = $request->completed;
$todo->modified = $request->modified;
$todo->save();
return response()->json([
'message' => 'Successfully added!'
], 200);
}
我遇到错误
Integrity constraint violation: 1048 Column 'Title' cannot be null (SQL: insert into `UserTodo` (`UserDetailId`, `Title`, `Details`, `completed`, `modified`, `DateModified`, `DateCreated`) values (1, ?, ?, ?, ?, 2020-05-19 01:06:50, 2020-05-19 01:06:50)) in file D:\My Workspace\Laravel\awiz\vendor\laravel\framework\src\Illuminate\Database\Connection.php on line 671
然后我找到了这个帖子 Posting JSON To Laravel
反过来促使我使用此
public function store(Request $request)
{
// dd($request);
$validator = Validator::make($request->all(), [
'Title' => 'required|string',
'Details' => 'required|string',
'completed' => 'required',
'modified' => 'required'
]);
$user = Auth::id();
$userDetails = UserDetailModel::find(1)->UserDetailId;
$testData = (object) $request->json()->all();
// dd($testData);
$todo = new UserTodoModel;
$todo->UserDetailId = $userDetails;
$todo->Title = $testData->Title;
$todo->Details = $testData->Details;
$todo->completed = $testData->completed;
$todo->modified = $testData->modified;
dd($testData);
$todo->save();
return response()->json([
'message' => 'Successfully added!'
], 200);
}
然后我开始收到此错误,不确定为什么...
ErrorException: Undefined property: stdClass::$Title in file D:\My Workspace\Laravel\awiz\app\Http\Controllers\Dashboard\UserTodoController.php on line 49
编辑
对不起,我忘了张贴dd()输出...
当我使用dd($ testData)时,我得到了。
{#1251
+"0": array:8 [
"UserTodoId" => 0
"UserDetailId" => 1
"Title" => "Test item2"
"Details" => "This is a test item2"
"completed" => 1
"modified" => 0
"DateCreated" => "2020-05-20T00:00:00.000000Z"
"DateModified" => "2020-05-22T00:00:00.000000Z"
]
}
但是当我使用dd($ testData-> Title)时,我仍然遇到相同的错误
Undefined property: stdClass::$Title
我正在运行laravel 7.0
根据我的要求,我使用的是邮递员。
这是JSON正在发送
[
{
"UserTodoId": 0,
"UserDetailId": 1,
"Title": "Test item2",
"Details": "This is a test item2",
"completed": 1,
"modified": 0,
"DateCreated": "2020-05-20T00:00:00.000000Z",
"DateModified": "2020-05-22T00:00:00.000000Z"
}
]
编辑2
如果我发送嵌套的JSON,该怎么办,我将如何尝试访问内部JSON? 嵌套JSON
{
"fName": "Ahmed",
"lName": "Abdelsalam",
"email": "test@tessssssdst.com",
"password": "123456789",
"userDetails": {
"FirstName": "Ahmed",
"MiddleName": "Adil",
"LastName": "Abdelsalam",
"Designation": "Cashier",
"Gender": "Male",
"DOB": "2020-05-20T00:00:00.000000Z"
}
}
控制器
public function register(Request $request)
{
// Creating the user entry
// JSON conversion
$userData = (object) $request->json()->all();
// Validation
// $userData->validate([
// 'fName' => 'required|string',
// 'lName' => 'required|string',
// 'email' => 'required|string|email|unique:users',
// 'password' => 'required|string'
// ]);
// Creating instance
$user = new User;
$user->first_name = $userData->fName;
$user->last_name = $userData->lName;
$user->email = $userData->email;
$user->password = bcrypt($userData->password);
// Saving instance
$user->save();
// Creating the user details entry
// Getting user ID
$userId = User::where('email', $userData->email);
// JSON conversion
$userDetailsRawData = $userData->userDetails;
$userDetailsData = (object) $userDetailsRawData->json()->all();
dd($userDetailsData);
// Validation
// $userDetailsData->validate([
// 'FirstName' => 'required|string',
// 'MiddleName' => 'required|string',
// 'LastName' => 'required|string',
// 'Designation' => 'required|string',
// 'Gender' => 'required|string',
// 'DOB' => 'required',
// 'Email' => 'required|string|email|unique:userdetails',
// ]);
// Creating instance
$userDetails = new UserDetailModel();
$userDetails->FirstName = $userDetailsData->FirstName;
$userDetails->MiddleName = $userDetailsData->MiddleName;
$userDetails->LastName = $userDetailsData->LastName;
$userDetails->Designation = $userDetailsData->Designation;
$userDetails->Email = $userData->email;
$userDetails->Gender = $userDetailsData->Gender;
$userDetails->DOB = $userDetailsData->DOB;
$userDetails->UserId = $userId;
// Saving instance
$userDetails->save();
return response()->json([
'message' => 'Successfully created user!'
], 201);
}
如果不添加json()->all()
,我最终会得到一个数组,当我添加它时出现错误,我尝试使用json_decode()转换数组,但无法使用'->'访问元素产生的JSON我似乎在这里丢失了一些东西
答案 0 :(得分:1)
您请求中的元素Title
为空或不存在于请求中
这可能是由于打字错误,笔帽错误或类似原因造成的。
第一个错误显示您数据库中的一个错误,该错误试图插入具有显式必需字段且为null的记录。
第二个告诉您正在尝试访问尚未初始化的属性。
编辑:
查看完变量和请求的转储后,可以看到将请求设置为一个数组的元素。
这就是为什么成员Title
不存在的原因。
如果您尝试这样访问:
$testData[0]->Title
,您会发现自己的价值。
您之前没有遇到任何错误,因为您正在将值分配给主$testData
对象。
我的建议是像这样更新您的请求:
{
"UserTodoId": 0,
"UserDetailId": 1,
"Title": "Test item2",
"Details": "This is a test item2",
"completed": 1,
"modified": 0,
"DateCreated": "2020-05-20T00:00:00.000000Z",
"DateModified": "2020-05-22T00:00:00.000000Z"
}
仅发送一个对象,而不发送带有一个元素的数组。