2016-09-18 55 views
1

嗨我想使用多對多多態但不知何故它不工作我附上我的代碼可以找出我做錯了什麼?Laravel多對多多態關係不起作用

我的移民:

Schema::create('stickers', function (Blueprint $table) { 
     $table->increments('id'); 

     $table->string('name'); 
     $table->string('type'); 

     $table->timestamps(); 
    }); 
    Schema::create('stickables', function (Blueprint $table) { 

     $table->integer('sticker_id')->nullable(); 
     $table->integer('stickable_id'); 
     $table->string('stickable_type'); 
     $table->primary(['sticker_id', 'stickable_id', 'stickable_type']); 

     $table->foreign('sticker_id') 
      ->references('id')->on('stickers') 
      ->onDelete('cascade'); 
     $table->timestamps(); 
    }); 

和我的模型

旅行模式:

public function stickables() 
{ 
    return $this->morphToMany(Stickable::class, 'stickable'); 
} 

Stickable型號:

public function trips() 
{ 
    return $this->morphedByMany(Trip::class, 'stickable'); 
} 

控制器:

public function store(Request $request) 
{ 

    $trip = new Trip(); 
    $trip->name = $request->name; 
    $trip->desc = $request->desc; 
    $trip->creator_id = Auth::user()->id; 
    $trip->save(); 

    $tags=$request->tags; 
    $trip->stickables()->attach($tags); 
    $trip->save(); 
    return redirect('/trip'); 
} 
+1

你能指定什麼不起作用嗎?你期待的結果是什麼?你得到的結果是什麼? – Matey

+0

@Matey確定我想要做這樣的事情'$ trip-> stickables() - > get()'但是我什麼也沒看到我的數據庫stickables表和sticker_id始終爲空 – MohammadrezA

+0

@MohammadrezA你可以嘗試使用同步方法,而不是附加'$ trip-> stickables() - > sync($ tags)' – Gadzhev

回答

1

這裏是你如何定義你的關係:

Trip型號:

public function stickers() 
{ 
    return $this->morphToMany(Sticker::class, 'stickable'); 
} 

Sticker型號:

public function trips() 
{ 
    return $this->morphedByMany(Trip::class, 'stickable'); 
} 

你並不需要一個模型的關係( Stickable)。你應該創建一個貼紙模型並定義你的關係噸。

Stickable可以參考Trip或任何其他類型的模型,你需要與貼紙建立關係。但是,在您的代碼中,您在Trip模型上有stickable方法,這沒有意義。

Eloquent Many to Many Polymorphic Relationships