SQLSTATE[23000]:违反完整性约束:1048。将数据从 vue 发布到 laravel 控制器
SQLSTATE[23000]: Integrity constraint violation: 1048. Posting data from vue to laravel controller
我相信我需要的答案在某处 here 但我无法弄清楚我的代码有什么问题。
我正在尝试在创建订单后创建订单详细信息table。
所以我 post 数据从 vue 到端点这里。
createOrder: function() {
this.$http.post('/api/orders', {
customer_id: this.form.customer.id,
items: _.map(this.cart, function(cart){
return {
//these are the only values I need from the each item in the cart.
product_id: cart.id,
quantity: cart.quantity,
price: cart.price
}
})
}).then(function(response) {
let responseBody = response.body;
this.$set('cart', []);
this.form.customer = {};
});
然后在控制器的存储方法中我想收集数据、创建订单、使用购物车中的所有商品创建 order_details table。
public function store(Request $request)
{
$items = $request->input('items');
$staff = $request->user()->id;
$customer = $request->input('customer_id');
$status_id = 1;
$order = new Order();
$order->user_id = Auth::user()->id;
$order->id_statuses = $status_id;
$order->id_customers = $customer;
//save order
$order->save();
foreach($items as $item){
$order_detail = new OrderDetail();
$order_detail->order_id = $order->id;
$order_detail->id_products = $item->product_id;
$order_detail->quantity = $item->quantity;
$order_detail->price = $item->price;
//save order detail
$order_detail->save();
}
return response()->json($order);
}
在回溯中,所有值 return 都为空,因此出现了数据库错误。我敢打赌我实际上并没有得到这些物品或正确访问那里的财产。
如果有帮助的话,这是有效负载的截图。我也乐于接受有关 post 处理数据的更好方法的建议,以便更容易使用,因为我是这两个框架的新手。
错误信息:
SQLSTATE[23000]: Integrity constraint violation: 1048
Column 'id_products' cannot be null (SQL: insert into `order_details`
(`order_id`, `id_products`, `quantity`, `price`, `updated_at`,
`created_at`) values (78, , , , 2016-12-30 17:18:04, 2016-12-30 17:18:04))
id_products
的值不会出现在 $items 变量中。
试试
$items = $request->items;
您需要提供 id_products
的值至少为空白
或
你应该输入默认值
$table->integer('id_products')->default(0);
要更改现有列,请使用此
$table->integer('id_products')->default(0)->change();
如果 laravel 5.3
中没有任何默认值,则不能将此留空
我试过以这种方式访问每个对象的属性并且成功了。
public function store(Request $request)
{
$items = $request->items;
foreach ($items as $item){
$order_detail = new OrderDetail();
$order_detail->order_id = 99;
$order_detail->id_products = $item['product_id'];
$order_detail->quantity = $item['quantity'];
$order_detail->price = $item['price'] * $item['quantity'];
$order_detail->save();
}
return response("success");
}
有谁知道为什么必须这样?
我相信我需要的答案在某处 here 但我无法弄清楚我的代码有什么问题。
我正在尝试在创建订单后创建订单详细信息table。 所以我 post 数据从 vue 到端点这里。
createOrder: function() {
this.$http.post('/api/orders', {
customer_id: this.form.customer.id,
items: _.map(this.cart, function(cart){
return {
//these are the only values I need from the each item in the cart.
product_id: cart.id,
quantity: cart.quantity,
price: cart.price
}
})
}).then(function(response) {
let responseBody = response.body;
this.$set('cart', []);
this.form.customer = {};
});
然后在控制器的存储方法中我想收集数据、创建订单、使用购物车中的所有商品创建 order_details table。
public function store(Request $request)
{
$items = $request->input('items');
$staff = $request->user()->id;
$customer = $request->input('customer_id');
$status_id = 1;
$order = new Order();
$order->user_id = Auth::user()->id;
$order->id_statuses = $status_id;
$order->id_customers = $customer;
//save order
$order->save();
foreach($items as $item){
$order_detail = new OrderDetail();
$order_detail->order_id = $order->id;
$order_detail->id_products = $item->product_id;
$order_detail->quantity = $item->quantity;
$order_detail->price = $item->price;
//save order detail
$order_detail->save();
}
return response()->json($order);
}
在回溯中,所有值 return 都为空,因此出现了数据库错误。我敢打赌我实际上并没有得到这些物品或正确访问那里的财产。
如果有帮助的话,这是有效负载的截图。我也乐于接受有关 post 处理数据的更好方法的建议,以便更容易使用,因为我是这两个框架的新手。
错误信息:
SQLSTATE[23000]: Integrity constraint violation: 1048
Column 'id_products' cannot be null (SQL: insert into `order_details`
(`order_id`, `id_products`, `quantity`, `price`, `updated_at`,
`created_at`) values (78, , , , 2016-12-30 17:18:04, 2016-12-30 17:18:04))
id_products
的值不会出现在 $items 变量中。
试试
$items = $request->items;
您需要提供 id_products
的值至少为空白
或
你应该输入默认值
$table->integer('id_products')->default(0);
要更改现有列,请使用此
$table->integer('id_products')->default(0)->change();
如果 laravel 5.3
中没有任何默认值,则不能将此留空我试过以这种方式访问每个对象的属性并且成功了。
public function store(Request $request)
{
$items = $request->items;
foreach ($items as $item){
$order_detail = new OrderDetail();
$order_detail->order_id = 99;
$order_detail->id_products = $item['product_id'];
$order_detail->quantity = $item['quantity'];
$order_detail->price = $item['price'] * $item['quantity'];
$order_detail->save();
}
return response("success");
}
有谁知道为什么必须这样?