2017-08-11 2 views
0

Je suis en train de mettre à jour et l'enregistrement existant dans le tableau croisé dynamique pour beaucoup de relations à laravel.appel laravel à un membre catégories catégories() sur entier

je fonction de magasin qui fonctionne:

public function store(Request $request) 
{ 
    $produk = new product($request->input()) ; 

    $feat = (boolean)$request->input('featured'); 
    $input = $request->all(); 
    $input['featured'] = $feat; 

    $inputproduk = product::create($input); 
    $inputproduk->categories()->attach($request->input('kat_id')); 
    return redirect()->back()->with('message', 'Memasukkan Data Produk Berhasil'); 
} 

Mais pourquoi ma fonction de mise à jour ne fonctionne pas ???

public function update(Request $request, $id) 
{ 
    $produk = Product::FindorFail($id); 

    $produk = new product($request->input()) ; 

    $input = $request->except('_method', '_token', 'picture', 'kat_id'); 
    $inputproduk = product::whereId($id)->update($input); 
    $inputproduk->categories()->sync($request->input('kat_id')); 

    return redirect()->back()->with('message', 'Mengedit Data Produk Berhasil'); 

} 

L'erreur est:

Appel à une catégorie de fonction membre() sur entier

Qu'est-ce que cela signifie? Aidez-moi, s'il vous plaît.

Vue:

 <div class="form-group"> 
      <label for="KategoriProduk">Kategori Produk</label> 
      <select class="form-control" name="kat_id[]" multiple> 
      @foreach($kategoris as $value) 
       <option value="{{$value->id}}">{{$value->namekat}}</option> 
      @endforeach 
      </select> 
     </div> 

je poste que partiellement parce que si je posterai tout alors la question est plein de code. Dites-moi si vous avez besoin de plus.

Répondre

1

C'est à cause de la ligne suivante.

$inputproduk = product::whereId($id)->update($input); 

Lorsque vous appelez le mettre à jour, vous recevrez un integer pas un objet product.

Ce que vous pouvez faire est d'abord obtenir le produit, puis mettre à jour.

$inputproduk = product::whereId($id)->first(); 
$inputproduk->update($input); 
$inputproduk->categories()->sync($request->input('kat_id')); 
+0

pourquoi d'abord() est nécessaire? lorsque j'essaie ceci: $ inputproduk = product :: whereId ($ id); $ inputproduk-> update ($ input); $ inputproduk-> categories() -> sync ($ request-> entrée ('kat_id')); categories() a envoyé une erreur. Pouvez-vous me dire pourquoi le premier() est nécessaire? –

+0

'$ inputproduk = product :: whereId ($ id);' retournera une instance de constructeur de requête, pas un modèle 'product'. En appelant la méthode 'first', vous obtenez le premier élément du résultat en tant que modèle' product'. Si vous appelez 'categories' sur le générateur de requête, une erreur sera générée car cette méthode n'est pas définie. – chanafdo

+0

oh, bonne réponse, merci l'homme: D –