У меня есть структуры таблиц как
продукты id
пачек id
pack_products pack_id, product_id
pack_optional_products pack_id, product_id
Таким образом, в приведенной выше таблице pack
будет иметь 2 типа products
, compulsory products
и optional products
. Это означает, что если покупатель приобретет pack
, продукты, которые прилагаются в этом пакете как обязательные, будут автоматически заказаны. , но покупатель также может увидеть, есть ли в упаковке какой-либо дополнительный продукт, поэтому покупатель также может его купить.
Теперь для управления заказами у меня есть следующая таблица.
заказов id, customer_id
order_pack order_id, pack_id
Здесь все отлично работает, используя метод attach
как $order->packs()->attach($pack["pack_id"]);
Итак, здесь начинается проблема (когда я пытался добавить дополнительные заказанные продукты в заказанный пакет), чтобы управлять заказом дополнительных продуктов, я создал следующую таблицу
order_pack_product order_id, pack_id, pack_optional_product_id
Я создал модель как.
class Order extends Model
{
//
public function packs(){
return $this->belongsToMany(Pack::class)->withTimestamps()->withPivot('name');
}
public function parent() {
return $this->belongsTo(ParentCustomer::class);
}
}
class OrderPack extends Model
{
//
public function optionalProducts()
{
return $this->belongsToMany(PackOptionalProduct::class, 'order_pack_product')->withTimestamps();
}
}
А потом я вызываю метод как.
$order->packs()->optionalProducts()->attach($optionalProduct["pack_optional_product_id"]);
и я получаю эту ошибку.
BadMethodCallException: вызов неопределенного метода
Осветить \ Database \ Красноречивых \ Отношения \ BelongsToMany :: optionalProducts ()
в файле
/.../....../laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php
по линии 50
ТАК полный код, относящийся к приведенным выше таблицам, будет таким.
$order = new Order();
$order->parent_id = $parent->id;
$order->school_id = $schoolId;
if($order->save()){
foreach($json["packs"] as $pack){
$order->packs()->attach($pack["pack_id"], ["child_name" => $pack["child_name"]]);
foreach($pack["optional_products"] as $optionalProduct){
$order->packs()->optionalProducts()->attach($optionalProduct["pack_optional_product_id"]);
}
}
return response()->json(["status" => "ok", "order_id" => $order->id]);
}else{
return response()->json(["status" => "failed"]);
}