Я новичок в стеке Laravel и в настоящее время разрабатываю API с Lumen и Eloquent.У меня есть требование сохранить Order
модель вместе с OrderLine
s.Однако это не проходит.Не могли бы вы показать мне, как это сделать.
Ниже приведены настройки моей модели и контроллера:
class Order extends Model {
public function orderLines() {
return $this->hasMany('App\OrderLine')
}
}
class OrderLine extends Model {
.....
}
//inside OrdersController method I'm trying to save Order with Order lines received from JSON body
public function create(Request $request)
{
$orderData = $this->validate($request, [
'store' => 'required',
......
'order_status' => 'bail|required|max:20',
'delivery_date' => 'nullable|date',
'customer_id' => 'nullable|numeric',
'order_lines.*.product_id' => 'bail|required|numeric',
'order_lines.*.description' => 'bail|required|max:80',
'order_lines.*.unit_price' => 'bail|required|numeric',
'order_lines.*.discount' => 'bail|required|numeric',
'order_lines.*']);
$order = new Order($orderData);
$order->push(); // This does not save and gives me an error
$order->refresh();
return response()->json($order);
}
//This is the json body provided in the request
{
"store" : "Some Store",
...
"order_lines" : [{
"product_id": 1,
"description": "TU001: Polka dots",
"unit_price": 1000,
"discount": 100,
"units": 2
},
{
"product_id": 2,
"description": "TU002: Polka dots",
"unit_price": 500,
"discount": 0,
"units": 1
}]
}
Когда я пытаюсь сохранить один ордер без строк заказа, используя метод save
, онработает.Но с OrderLine
s это не получается.
Может кто-нибудь, пожалуйста, покажите мне, как это сделать.Раньше я делал это в CakePHP, но не уверен, как это делается в Eloquent.
// РЕДАКТИРОВАНИЕ С ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИЕЙ В сгенерированном SQL-запросе на вставку я вижу orderLines
, взятый в качестве столбца в Order
Таблица.С тех пор это дает ошибку преобразования массива в строку.Но на самом деле вставка orderLines
должна быть в отдельном SQL-запросе.