2016-12-30 135 views
0

我有一個笑話,joke_tags,tags表。我試圖讓所有與笑話ID匹配的標籤。Laravel belongsToMany,無法解決它

class Joke extends Model 
{ 
    public function tags() { 
     return $this->belongsToMany('App\Tag', 'joke_tags', 'tag_id', 'joke_id'); 
    } 
} 

我的標籤型號:

class Tag extends Model 
{ 
    public function jokes() { 
     return $this->belongsToMany('App\Joke'); 
    } 
} 

兩個功能tags()jokes()不工作......我一直在用,現在奮鬥2小時。

我的數據庫佈局:

Schema::create('jokes', function (Blueprint $table) { 
    $table->increments('ID'); 
    $table->string('author'); 
    $table->longText('joke'); 
    $table->timestamps(); 
}); 

Schema::create('joke_tags', function (Blueprint $table) { 
    $table->increments('ID'); 
    $table->integer('joke_id')->unsigned(); 
    $table->foreign('joke_id')->references('ID')->on('jokes'); 
    $table->integer('tag_id')->unsigned(); 
    $table->foreign('tag_id')->references('ID')->on('tags'); 
}); 

Schema::create('joke_votes', function (Blueprint $table) { 
    $table->increments('ID'); 
    $table->integer('joke_id')->unsigned(); 
    $table->foreign('joke_id')->references('ID')->on('jokes'); 
    $table->string('IP'); 
    $table->boolean('type'); 
}); 

Schema::create('tags', function (Blueprint $table) { 
    $table->increments('ID'); 
    $table->string('tag'); 
}); 

回答

1

添加這兩種你的模型,你會好到哪裏去。

protected $primaryKey = 'ID'; 

編輯:除了添加上面的屬性,你應該定義的關係如下。

class Joke extends Model 
{ 
    public function tags() { 
     return $this->belongsToMany('App\Tag', 'joke_tags', 'joke_id', 'tag_id'); 
    } 
} 

class Tag extends Model 
{ 
    public function jokes() { 
     return $this->belongsToMany('App\Joke', 'joke_tags', 'tag_id', 'joke_id'); 
    } 
} 
+0

那麼,爲什麼laravel承擔不同的主鍵?... – tempestor

+1

因爲laravel假設你的主鍵被命名爲「ID」。你改變它,然後你需要告訴它你改變了什麼。 –

+0

@tempestor這個答案對你有幫助嗎?我可以看到你在關係中也使用錯誤的語法,所以他們不工作。你解決了這個問題嗎? –