Laravel - 将数据保存到多对多关系

Posted

技术标签:

【中文标题】Laravel - 将数据保存到多对多关系【英文标题】:Laravel - Saving data to many-to-many relationship 【发布时间】:2014-05-20 10:19:03 【问题描述】:

是否可以将更多数据保存到多对多数据透视表中?

我的代码:

    public function lists() 
        return $this->belongsToMany('ShoppingList','shopping_list_ingredients','shopping_list_id','ingredients_id')
        ->withPivot(array('unit','amount'))
        ->withTimestamps();
  

反之亦然! 现在,我需要将附加数据添加到数据透视表中。

这是我的保存代码:

    $list = new ShoppingList;
    $list->user_id = Auth::user()->id;
    $list->title = Input::get('recipe_title');
    $list->save();
    $list->ingredients()->sync(Input::get('ingredient'));
    $list->push();  

和我的视图代码:

- $i->amount $i->unit $i->name -  Form::checkbox('ingredient[]', $i->id) <br/>  

现在我需要以某种方式将每个 ID 的“数量”和“单位”传递到控制器和枢轴中。目前,它只保存 ID。

我该怎么做?

【问题讨论】:

【参考方案1】:

你可以试试这样的:

$ingredientId = Input::get('ingredient');
$amount = 'some amount';
$unit = 'some unit';
$pivotData = array($ingredientId => array('amount' => $amount, 'unit' => $unit));

$list->ingredients()->sync($pivotData);

您也可以使用attach 方法,阅读Laravel Website 上的文档了解更多信息。

【讨论】:

【参考方案2】:

你必须使用附加功能。

$list->ingredients()->attach($ingredients->id,['unit' => $unit, 'amount' => $amount]);

【讨论】:

以上是关于Laravel - 将数据保存到多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中检索链接到多对多关系的模型?

Laravel 多对多关系在哪里保存项目总数? [关闭]

与同一张表的关系(多对多?) - Laravel

Django 保存到多对多字段

Laravel 上的多对多问题关系

没有链接表/模型的多对多关系?