2016-12-30 117 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这个答案对你有帮助吗?我可以看到你在关系中也使用错误的语法,所以他们不工作。你解决了这个问题吗? –