我有模型Transaction
和Option
,它们有很多关系。数据透视表transaction_options
包含transaction_id
,option_id
和price
列。
我在模型中定义了这样的关系:
交易型号:
public function options()
{
return $this->belongsToMany('App\Option', 'transaction_options')->withPivot('price');
}
选项型号:
public function transactions()
{
return $this->belongsToMany('App\Transaction', 'transaction_options')->withPivot('price');
}
我想知道如何在数据透视表中保存一些东西,我尝试过类似的东西,但它无法正常工作:
foreach($data->options as $option) {
$transaction->options()->create([
'transaction_id' => $transaction->id,
'extras_id' => $option->extraId,
'option_id' => $option->id,
'price' => $option->price
]);
}
我该怎么做?
答案 0 :(得分:5)
将额外字段作为值附加到附加功能
$transaction->options()->attach([$request['id'] => ['price' => $request['price']]]);
答案 1 :(得分:0)
https://laravel.com/docs/master/eloquent-relationships#updating-many-to-many-relationships
从我所看到的,您应该使用这样的代码:
foreach ($data->options as $option) {
$transaction->options()->attach($option->id, ['price' => $option->price])
}
答案 2 :(得分:0)
您可以将透视数据作为第二个参数传递:
foreach($data->options as $option) {
$transaction->options()->create(
['extras_id' => $option->extraId],
['price' => $option->price]
);
}
您也不需要同时传递transaction_id
和option_id
,它们会自动插入。