Laravel附加数据透视表没有错误

时间:2018-11-14 18:45:09

标签: php laravel

我有一个数据透视表和模型产品上的关系:

public function product_bodies()
{
    return $this->belongsToMany(static::class, 'product_bodies')->withPivot('product_id', 'product_body_id');
}

在控制器中我想附加数据时:

    $products = ['sadasdasd', 'asdasda', 'asdasd', 'asdasd']; //for column product_body_id
    $product = Product::create($request->all());

    $product->product_bodies()->attach($products);

我得到了错误:

  

一般错误:1364字段“ product_body_id”没有默认值   值

如果我这样做:

public function product_bodies()
{
    return $this->belongsToMany(static::class, 'product_bodies', 'product_id', 'product_body_id')->withPivot('product_id', 'product_body_id');
}

然后一切正常。但是然后我无法通过以下方式获取数据透视表:

$product->product_bodies;

我收到空物品。

如何解决此问题?

product_bodies具有3列:

  • id
  • product_id
  • product_body_id

在product_body_id中,我传递了字符串。

1 个答案:

答案 0 :(得分:0)

我有3个想法:

  1. 您需要将static :: class替换为'\ App \ ProductBody'或ProductBody :: class

    public function product_bodies()
    {
        return $this->belongsToMany('\App\ProductBody', 'product_bodies')->withPivot('product_id', 'product_body_id');
    }
    
  2. $ products必须是产品主体ID的数组。

    $productBodiesIds = [1, 55, 66];
    $product->product_bodies()->attach($productBodiesIds);
    
  3. 也许,同步而不是附加将是一个更好的解决方案。