SQLSTATE [23000]: нарушение ограничения целостности: 1048. Отправка данных из vue в контроллер laravel

Я считаю, что ответ на то, что мне нужно, где-то Вот но я почему-то не могу понять, в чем проблема с моим кодом.

Я пытаюсь создать таблицу деталей заказа после создания заказа.
Поэтому я отправляю данные в конечную точку из 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 = {};
});

затем в методе store контроллера я хочу собрать данные, создать заказ, создать таблицу order_details, используя все товары в корзине.

  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);

}

При трассировке все значения возвращают ноль, поэтому я получаю ошибку БД. Моя ставка в том, что я не получаю предметы или не получаю доступ к свойствам.

Вот выстрел полезной нагрузки, если это помогает. Я также открыт для предложений о лучших способах размещения данных, чтобы с ними было легче работать, поскольку я новичок в обеих этих платформах.

введите описание изображения здесь

СООБЩЕНИЕ ОБ ОШИБКЕ:

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))

2

Решение

Ценность id_products не приходит сюда в переменной $ items.

Попробуй с

$items = $request->items;

Вы должны предоставить значение id_products по крайней мере, пустой

ИЛИ ЖЕ

Вы должны поставить значение по умолчанию

$table->integer('id_products')->default(0);

Чтобы изменить существующий столбец, используйте этот

$table->integer('id_products')->default(0)->change();

Вы не можете оставить это поле пустым без значения по умолчанию в laravel 5.3

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");}

Кто-нибудь знает, почему так должно было быть?

0

По вопросам рекламы [email protected]