ItemsController:
public function save_item(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'name' => ['required', 'string', 'max:255'],
'description' => ['required', 'string']
]);
if($validator->fails()) {
return response([
'success' => false,
'message' => 'Database failed.'
], 403);
}
$data = [
'item_id' => (int) $id, // sql reads this as null, it should be integer
'name' => $request->input('name'),
'description' => $request->input('description')
];
$newItem = new Item($data);
$result = $newItem->save();
if(!$result) {
return response([
'success' => false,
'message' => 'Database failed.'
], 403);
}
return response()->json([
'success' => false,
'data' => $result
]);
}
web.php:
Route::post('/items/{id}', [ItemsController::class, 'save_item'])->('item.save');
script.js
$('#new-item-form').on('submit', function(e) {
e.preventDefault();
var name = $('input[name=name]').val();
var description= $('input[name=description]').val();
$.ajax("{{ route('item.save', ['id' => $id]) }}", {
method: "POST",
data: {
name,
description
},
});
});
On the ItemsController, when I return a response immediately like:
return response()->json([
'id' => (int) $id
]);
it has a value, but on:
$data = [
'item_id' => (int) $id, // sql reads this as null, it should be integer
'name' => $request->input('name'),
'description' => $request->input('description')
];
$newItem = new Item($data);
$result = $newItem->save();
SQL returns: Column 'item_id' cannot be null.