我的表结构为
产品 ID
包装 ID
pack_products pack_id,product_id
pack_optional_products pack_id,product_id
因此,在上表中,title2
将有pack
,products
和compulsory products
两种类型,这意味着如果客户购买optional products
的产品,将自动订购该包装中的商品,但客户也可以查看包装中是否有可选产品,因此客户也可以购买该产品。
现在可以管理订单了。
订单 ID,customer_id
order_pack order_id,pack_id
使用pack
方法attach
所以这里的问题开始了(当我尝试在订购的包装中添加订购的订购产品时),为了管理订购的订购产品,我创建了下表
order_pack_product 订单ID,pack_id,pack_optional_product_id
我已经创建了一个模型。
$order->packs()->attach($pack["pack_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();
}
}
我收到此错误。
BadMethodCallException:调用未定义的方法 照亮\ Database \ Eloquent \ Relations \ BelongsToMany :: optionalProducts() 在文件中 /.../....../laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php 在第50行
与上表相关的SO完整代码将是这个。
$order->packs()->optionalProducts()->attach($optionalProduct["pack_optional_product_id"]);
答案 0 :(得分:0)
optionalProducts()
是模型方法,而不是关系packs()
。
方法$order->packs()
-返回关系对象,属性$order->packs
-返回包模型的集合。
您需要迭代收集槽,以便将可选产品附加到每一个包装模型上。
foreach($pack["optional_products"] as $optionalProduct){
foreach($order->packs as $item){
$item->optionalProducts()->attach($optionalProduct["pack_optional_product_id"])
}
}
也许,这段代码无法纠正错误,所以您需要纠正代码逻辑。