2017-08-29 4 views
-1

Ich habe 2 Tabellen namens Produkte und Kategorie. Produkt gehört zu vielen Kategorien und Kategorien gehört zu vielen Produkten.Laravel viele-zu-viele Beziehung Grammatikfehler

Hier ist meine Tabellenschema:

Schema::create('products', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->timestamps(); 
     $table->string('image'); 
     $table->string('stock'); 
     $table->string('title'); 
     $table->string('slug')->unique(); 
     $table->string('gender'); 
     $table->text('description'); 
     $table->integer('price'); 
     $table->integer('user_id')->unsigned(); 
     $table->foreign('user_id')->references('id')->on('users') 
        ->onDelete('restrict') 
        ->onUpdate('restrict'); 

     $table->dateTime('published_at'); 
    }); 

Hier meine Kategorie Tabellenschema

Schema::create('categories', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('categorydesigner_id')->unsigned()->index(); 
     $table->string('name')->unique(); 
     $table->timestamps(); 
    }); 

    Schema::create('category_product', function (Blueprint $table) { 
     $table->integer('product_id')->unsigned()->index(); 
     $table->integer('category_id')->unsigned()->index(); 
     $table->foreign('category_id')->references('id')->on('categories') 
        ->onDelete('restrict') 
        ->onUpdate('restrict'); 
     $table->foreign('product_id')->references('id')->on('products') 
        ->onDelete('restrict') 
        ->onUpdate('restrict'); 
     $table->timestamps(); 
    }); 

ich die folgende Fehlermeldung erhalten

Type error: Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, string given, called in 

C:\xampp\htdocs\swimwear2\vendor\laravel\framework\src\Illuminate\Database\Query\Grammars\Grammar.php on line 681 

Hier ist mein Controller

public function productpost(Request $request){ 

    $this->validate($request, [ 
     'title' => 'required|max:255', 
     'description' => 'required', 
     'price' => 'required', 
     'image' => 'image|required', 
    ]); 

    $designer_name = $request->designer; 
    $designer_slug = str_random(40); 
    $designer = designer::where('name', $designer_name)->firstOrCreate(
      ['name' => $designer_name], ['slug' => $designer_slug] 
     ); 
    $designer->name = $designer_name; 
    $designer->slug = $designer_slug; 
    $designer->save(); 
    $designer_id = $designer->id; 
    $product = new Product; 
    $product->title = $request->title; 
    $product->designer_id = $designer_id; 
    $product->description = $request->description; 
    $product->price = $request->price; 
    $product->stock = $request->stock; 
    $product->gender = $request->gender; 
    $product_slug = str_random(40); 
    $product->slug = $product_slug; 
    $product->user_id = Auth::user()->id; 
    $product->published_at = Carbon::now()->format('Y-m-d'); 
    if($request->hasFile('image')) { 
     $file = Input::file('image'); 
     //getting timestamp 
     $timestamp = str_replace([' ', ':'], '-', Carbon::now()->toDateTimeString()); 
     $name = $timestamp. '-' .$file->getClientOriginalName(); 
     $file->move(public_path().'/images/product/', $name); 
     $product->image = $name; 
     $thumb = Image::make(public_path().'/images/product/' . $name)->resize(1200,1800)->save(public_path().'/images/product/thumb/' . $name, 90); 
    } 
    $product->save(); 
    $productsearch = product::where('slug', $product_slug)->firstorfail(); 
    $product_id = $productsearch->id; 
    $categoryname = $request->category; 
    $category = category::where('name', $categoryname)->firstOrCreate(
      ['name' => $categoryname], ['categorydesigner_id' => $designer_id] 
     ); 

    $category->name = $category; 

    $category->categorydesigner_id = $designer_id; 
    $category->save(); 

    $category->products()->attach($product_id); 
    return Redirect::back()->with('status', 'Post Success'); 
} 

Mein Produkt und Designer werden erfolgreich hinzugefügt und erhalten nur Fehler bei der Kategorieanforderung. Designerid kommt gut.

$category = category::where('name', $categoryname)->firstOrCreate(
      ['name' => $categoryname], ['categorydesigner_id' => $designer_id] 
     ); 

    $category->name = $category; 

    $category->categorydesigner_id = $designer_id; 
    $category->save(); 

    $category->products()->attach($product_id); 
+0

Können Sie versuchen, die Where-Klausel vor Ihrer firstOrCreate-Methode zu entfernen? Der erste Parameter verhält sich wie ein Where. Entfernen Sie auch $ category-> name, $ category-> categorydesigner_id und $ category-> save() Zeilen, diese sind alle unnötig und könnten Teil des Problems sein (nicht sicher, obwohl). – Alexej

+0

danke es jetzt behoben –

+0

Ich werde es als die Antwort auf Ihre Frage – Alexej

Antwort

1

Entfernen Sie die Where-Klausel vor Ihrer FirstOrCreate-Methode. Der erste Parameter verhält sich wie ein Where.

Entfernen Sie auch $category->name, $category->categorydesigner_id und $category->save() Zeilen, diese sind alle unnötig und könnte ein Teil des Problems sein.