Laravel属于ToMany,无法解决它

时间:2016-12-30 02:15:22

标签: php laravel many-to-many

我有一个笑话,joke_tags,标签表。我试图获取与笑话ID匹配的所有标签。

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 个答案:

答案 0 :(得分: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');
    }
}