2016-12-30 27 views
0

私はジョーク、joke_tags、tagsテーブルを持っています。そして私はジョークIDと一致するすべてのタグを取得しようとしています。マイTagモデル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があなたのプライマリキーは「ID」と命名されていると仮定しているので、なぜ違うの主キー?... – tempestor

+1

を想定laravelありません。あなたはそれを変更し、変更したものを伝える必要があります。 –

+0

@tempestorこの回答があなたを助けましたか?私はあなたも関係で間違った構文を使用することがわかります、彼らは動作しません。これを修正しましたか? –

関連する問題