在数据库中我有一张产品和组件表 我有一个表为多对多的关系,这是component_product 它具有(product_id,component_id,quantity)
的属性在模型产品中
class Product extends Model
{
protected $fillable = [
'name','price','user_id','is_avilable','description'
];
public function components()
{
return $this->belongsToMany('App\Component')
->withPivot('quantity');
}
}
在视图中
{!! Form::select('component_id[]',$components,null !!}
{!! Form::select('component_id[]',$components,null !!}
{!! Form::number('quantity[]',null ]) !!}
{!! Form::number('quantity[]',null ]) !!}
控制器中的
public function store(Request $request)
{
$product= Product::create( $request->all() );
$product->components()->sync($request->component_id => ['quantity'=> $request->quantity ] );
}
它给出了非法偏移类型错误
注意:如果模具转储$ request->数量或$ request-> component_id,它将正确获取数组
答案 0 :(得分:0)
在laravel docs(https://laravel.com/docs/5.5/eloquent-relationships)
中同步示例$user->roles()->sync([1 => ['expires' => true], 2, 3]);
尝试使用,
=>
所以在你的情况下:
$product->components()->sync([$request->component_id => ['quantity'=> $request->quantity]]);
答案 1 :(得分:0)
这就是我如何解决自己的问题 在Laravel文档中
$user->roles()->sync([1 => ['expires' => true], 2, 3]);
所以要匹配这个
$manyToMany = array();
for ( $i=0 ; $i< count($request->component_id); $i++ )
{
$manyToMany[ $request->component_id[$i] ] = ['quantity' =>$request->quantity[$i] ];
}
$product->components()->sync($manyToMany);
是他们的更好的解决方案