2016-04-30 11 views
0

Ich bin sehr neu zu Laravel Framework. Ich habe ein Formular, das ich beim Absenden Button klicken muss. Wenn Sie die Schaltfläche zum Senden der Schaltfläche klicken, wird die Funktion update() von controller.php aufgerufen. Ich kann jedoch keinen Feldwert bearbeiten.Aktualisieren von Tabellenfeldern auf Senden Schaltfläche

Hier ist mein Code.

public function update($id) 
    { 
     //echo "<pre>";print_r(Input::all());exit; 

     $product = $this->product->find($id); 

     $input  = Input::only('designer', 'sku', 'name', 'display_name', 'description', 'price', 'main_category', 'sub_category', 'lead_time', 'sizing', 'woven', 'body_fabric', 'lining_fabric', 'fit', 'primary_color', 'secondary_color', 'care_label', 'neck_type', 'closure', 'trims', 'special_finishings', 'image1', 'image2', 'image3', 'image4', 'image5','top', 'combo_products', 'keywords', 'visibility', 'featured'); 
     //echo "<pre>";print_r($input);exit; 

     try 
     { 
      $this->adminNewProductForm->validate($input); 


     } catch(\Laracasts\Validation\FormValidationException $e) 
     { 
      return Redirect::back()->withInput()->withErrors($e->getErrors()); 


     } 

     $slug  = Str::slug(Input::get('name')); 

     $slug  = $this->product->getSlug($slug); 

     $input  = array_add($input, 'slug', $slug); 


     DB::transaction(function() use($product, $input) 
     { 

      $product->fill($input)->save(); 

      $stock_count = 0; 

      if(!empty(Input::get('xsmall_size'))) 
      { 
       $rows = DB::table('products_variants')->where('product_id', $product->id)->where('variant_name', 'XS')->get(); 

       $stock_count += Input::get('xsmall_stock'); 

       if(!empty($rows)) 
       { 
        DB::table('products_variants')->where('product_id', $product->id)->where('variant_name', 'XS')->update(array('variant_specs' => Input::get('xsmall_size'), 'price_change' => Input::get('xsmall_price'), 'total_stock' => Input::get('xsmall_stock'), 'stock_used' => 0)); 


       } else { 

        DB::table('products_variants')->insert(array('product_id' => $product->id, 'variant_name' => 'XS', 'variant_specs' => Input::get('xsmall_size'), 'price_change' => Input::get('xsmall_price'), 'total_stock' => Input::get('xsmall_stock'), 'stock_used' => 0)); 

       } 

      } 

$input = array(); 

      $input['flagship_status'] = Input::get('flagship_status'); 

      if(Input::get('flagship_status')) 
      { 

       $input['stock_count'] = Input::get('small_stock'); 

      }else { 

       $input['stock_count'] = $stock_count; 
      } 

      $product->fill($input)->save(); 

     }); 

     //echo "<pre>";print_r(Input::all());exit; 

     return Redirect::back()->withFlashMessage('Product Updated Successfully!'); 

    } 

Auch ich kann nicht verstehen, was ist mit dieser Linie los? weil ich nirgendwo in meinem Code eine Validierungsfunktion gefunden habe.

$this->adminNewProductForm->validate($input); 

Ich muss Tabelle Produkte nicht products_variants aktualisieren.

Antwort

0

validate ist von der FormRequst Klasse geerbt.

https://laravel.com/api/5.0/Illuminate/Foundation/Http/FormRequest.html#method_validate

Sie haben zu viel Code zur Verfügung gestellt und zu wenig Informationen. Sie haben gesagt, dass Sie eine bestimmte Tabelle aktualisieren müssen, aber es gibt zwei Zeilen, in denen Sie einen Datenbankeintrag absichtlich manuell aktualisieren.

Dies ist einer von ihnen:

DB::table('products_variants')->where('product_id', $product->id)->where('variant_name', 'XS')->update(array('variant_specs' => Input::get('xsmall_size'), 'price_change' => Input::get('xsmall_price'), 'total_stock' => Input::get('xsmall_stock'), 'stock_used' => 0)); 

Wenn Sie dies nennen:

$product->fill($input)->save(); 

Es spart auch ‚schmutzig‘ (modifiziert) Modelle, die auch zu ihr gehören, die products_variants Beziehungen einschließen . Aus dem Sound heraus übernehmen Sie Änderungen fälschlicherweise direkt über SQL, und dann überschreibt die Save-Methode des Modells sie.

Sie scheinen sich nicht sicher zu sein, was Ihr Code tatsächlich macht, und ich würde dringend vorschlagen, es zu vereinfachen und Code hinzuzufügen, wenn Sie anfangen zu verstehen, was jede Zeile tut. Ich denke, deine Frage ist das Nebenprodukt, ein Beispiel zu kopieren und deine eigene Arbeit hinzuzufügen, ohne zu verstehen, wie Laravel mit Beziehungen und Modellen umgeht. Es gibt fast nie einen guten Grund, rohe SQL- oder DB-Anweisungen zu verwenden.

+0

danke, aber ich muss etwas probelm von EOD beheben. Ich werde trotzig nach Ihren Vorschlägen beginnen. –

+0

Ich möchte noch eine Hilfe, wie kann ich bitte einen Chat mit Ihnen initiieren –