如何在Laravel中加入多对多的关系?

时间:2017-08-28 08:44:31

标签: php mysql laravel laravel-5.4

我有2个表第1产品belongsToMany颜色和第2颜色belongsToMany产品

我这样做了我的桌子

产品表

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');
        });

和关系

的颜色表
Schema::create('colors', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name')->unique();
            $table->timestamps();
        });

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

我正在尝试在这样的1个产品中添加更多颜色

public function addproductdetailspost(Request $request, $product){

        $product = product::where('slug', $product)->firstorfail();
        $color = color::where('name', $request->color)->firstOrCreate();
        $color->name = $request->color;
        $color->save();
        $product_id = $product->id;
        $color_id = $color->id;
        $product->colors()->attach($product_id);
        return Redirect::back()->with('status', 'Post Success');
    }

它无效,我收到此错误

Type error: Too few arguments to function Illuminate\Database\Eloquent\Builder::firstOrNew(), 0 passed in C:\xampp\htdocs\swimwear2\app\Http\Controllers\AdminController.php on line 109 and at least 1 expected

1 个答案:

答案 0 :(得分:1)

这是错误的方向。

$color->products()->attach($product_id);