2017-09-17 1 views
0

dans la base de données i une table des produits et des composants
et j'ai une table pour plusieurs à plusieurs qui est component_product -il un des attributs de (product_id, ID_composant, quantité)Laravel illégale type offset sur plusieurs à plusieurs avec colonne supplémentaire

en produit de modèle

class Product extends Model 
{ 
     protected $fillable = [ 
     'name','price','user_id','is_avilable','description' 
    ]; 

    public function components() 
    { 
     return $this->belongsToMany('App\Component') 
      ->withPivot('quantity'); 
    } 
} 

en vue

{!! Form::select('component_id[]',$components,null !!} 
{!! Form::select('component_id[]',$components,null !!} 
{!! Form::number('quantity[]',null ]) !!} 
{!! Form::number('quantity[]',null ]) !!} 

dans le contrôleur

public function store(Request $request) 
{ 
     $product= Product::create($request->all()); 
     $product->components()->sync($request->component_id => ['quantity'=> $request->quantity ]); 

} 

Il me donne une erreur de type offset illégale de

avis: si décharge die $ request-> quantité ou $ request-> ID_composant il obtiendra le tableau correctement

Répondre

0

c'est comment je résoudre mon problème
dans la documentation Laravel

$user->roles()->sync([1 => ['expires' => true], 2, 3]); 

donc pour correspondre à cette

$manyToMany = array(); 
     for ($i=0 ; $i< count($request->component_id); $i++) 
     { 
      $manyToMany[ $request->component_id[$i] ] = ['quantity' =>$request->quantity[$i] ]; 
     } 
     $product->components()->sync($manyToMany); 

est leur est une meilleure solution