我正在使用 Laravel 构建 API。
在这个 API 中,我使用了两个模型,Order
模型和 Product
模型。
一个订单可以有多个产品。为了建立这种关系,我做了3张表。
下面是表格:
订单
Field Type
id INT
user_id INT
created_at TIMESTAMP
updated_at TIMESTAMP
产品
Field Type
id INT
name VARCHAR
price DECIMAL
created_at TIMESTAMP
updated_at TIMESTAMP
订单商品
Field Type
id INT
order_id INT
product_id INT
quantity INT
created_at TIMESTAMP
updated_at TIMESTAMP
问题是,如果 API 客户端有一个订单页面(或者你可以说是购物车页面),当用户提交购物车表单时,客户端将发布多个订单项目(产品)到服务器知道这一点,
- 我们如何将多个订单项(产品)放入 AJAX JSON 数据中?
- 如果我们使用 REST,哪种路由 URL 适合这种情况?
- 我们如何处理 Controller 中包含多个订单项的 json 数据?
最佳答案
所以根据你的问题。 以下 JSON 将起作用。 JSON 中将有一个订单数组,其中包含多个订单,如下所示:
{
"user_id": 1
"orders": [
{"product_name": "Whatever1 is selected", "quantity": 1},
{"product_name": "Whatever2 is selected", "quantity": 2},
{"product_name": "Whatever3 is selected", "quantity": 3},
],
}
然后在服务器端:
public function store(Request $request)
{
// after validating this you can use foreach to parse the the json
foreach($request->orders as $order)
{
//suposse you have orders table which has user id
Order::create([
"product_name" => $order['product_name'],
"quantity" => $order['quantity'],
"user_id" => $request->user_id // since this is just json object not an jsonarray
]);
}
}
如果您使用的是 Laravel Passport,则无需在 JSON 中指定 user_id。在这种情况下,您的 JSON 将类似于:
{
"orders": [
{"product_name": "Whatever1 is selected", "quantity": 1},
{"product_name": "Whatever2 is selected", "quantity": 2},
{"product_name": "Whatever3 is selected", "quantity": 3},
],
}
然后在你 Controller 的服务器端:
public function store(Request $request)
{
// after validating this you can use foreach to parse the the json
foreach($request->orders as $order)
{
//suposse you have orders table which has user id
Order::create([
"product_name" => $order['product_name'],
"quantity" => $order['quantity'],
"user_id" => Auth::id() // since you are using passport
]);
}
}
在 api.php 文件中的路由:
Route::post('user/order','OrderController@store');
// if using Laravel Passport
Route::post('user/order','OrderController@store')->middleware('auth:api');
这就是您如何使用 passport 在 JSON 中存储同一用户的多个订单,而无需 passport 包。
注意:您可以根据您的设计更改 json 键名。 这只是一个示例,让您了解如何使用它。
关于javascript - Laravel API,一次POST请求中传递多个对象的正确方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52699166/