具有多功能的Laravel多对多关系

具有多功能的Laravel多对多关系,laravel,vue.js,eloquent,many-to-many,laravel-controller,Laravel,Vue.js,Eloquent,Many To Many,Laravel Controller,我认为我在发展我的拉威尔技能方面做得很好,但似乎我被卡住了,还不能在网上找到解决办法 我的项目是建立在拉雷维尔和Vue,我试图存储与成分的产品。产品在产品表中。配料表中的配料。我成功地用品牌标识存储了产品,后来检索到了品牌(一对多),但我不知道如何对多对多进行此操作:产品的成分 因为我使用Vue,所以我添加了JSON输出来发布我的数据 public function store() { $product = new Product(); $product->ean =

我认为我在发展我的拉威尔技能方面做得很好,但似乎我被卡住了,还不能在网上找到解决办法

我的项目是建立在拉雷维尔和Vue,我试图存储与成分的产品。产品在产品表中。配料表中的配料。我成功地用品牌标识存储了产品,后来检索到了品牌(一对多),但我不知道如何对多对多进行此操作:产品的成分

因为我使用Vue,所以我添加了JSON输出来发布我的数据

public function store()
{
    $product = new Product();

    $product->ean =             request('ean');
    $product->name =            request('productName');
    $product->brand_id =        request('brandId');

    $ingredients =              request('ingredients');

    $product->save();
}
正如我在上面解释的,保存产品进展顺利。 但现在我需要对$Components数组进行一些操作,我发现了如下行:

$user->roles()->save($role);
因此,我认为我必须对所有成分进行foreach循环,并在其中执行以下操作:

$product->ingredients()->save($ingredient);
我不明白的是什么。此数组将包含已存储的现有配料,但也包含必须添加到配料表中的新配料。如何做到这一点


因此,将新成分存储在它的表中,并将关系存储在雄辩的表中。我可能离得很近,也可能离得很远,有人吗?

在循环配料时,查看
firstOrNew()
方法:

foreach($request->input("ingredients") AS $ingredient){
  $ingredient = Ingredient::firstOrNew(["name" => $ingredient]);
  // Note: assumed name for column that matches `$ingredient` from array, adjust as needed.
}
在该循环中,
attach()
将您的
$component
添加到新的
$product
。完全实现时,您的代码应如下所示:

$product = new Product();
...
$product->save();

foreach($request->input("ingredients") AS $ingredient){
  $ingredient = Ingredient::firstOrNew(["name" => $ingredient]);
  $product->ingredients()->attach($ingredient->id); 
}
attach()
将通过向
产品
成分
之间的轴心添加记录,将此新的或现有的
$component
与新的
$product
关联。无法使用
$product->components()->保存($component)的原因是指这是一个
多对多
,需要
attach()
<代码>$model->relationship()->save()用于一对多的
操作


有关创建方法的完整文档可在此处找到:

他也可以在第一个循环中首先或新建,然后将检索/插入的成分的I'd值放入$Components并使用
$product->Components()->sync($Components))
out of the foreach可大量同步关系谢谢你的回答。它似乎帮助我更进一步。现在出现一个新错误,似乎没有使用attach()调用发送产品ID:SQLSTATE[23000]:完整性约束冲突:1048列“产品ID”不能为空(SQL:insert into
product\u Components
Components\u ID
product\u ID
)值(2,)编辑:Nvm,必须放置$product->save()在我的foreachOh之前,顺便说一句,我把firstOrNew()改为firstOrCreate(),这样我就不必手动保存配料了。