2017-02-21 14 views
0

私は、ユーザーが投稿を評価できるブログタイプのウェブサイトを実装しようとしています。だから、関係がこのようなものです:Laravel関係からサブテーブル

Blog -> blog_links; To Many fk = blog_id 
User -> blog_links; To Many fk = user_id 

私はこれらのソリューションを試みたし、毎回異なるエラーを取得:

User::hasManyThrough(Blog::class, BlogLink::class); 

動作しませんでしたので、私は、クエリの範囲を試してみました:

scopeWithLinksAndResorts($query) { 
    return $query->with(['resorts' => function($q) { 
     $q->ordered()->withLinks(); 
    }]); 
} 

これは結果を返すようには見えません。だから私はここで間違っているのか分からない。そして、ここでテーブルの例です:

ブログ

id Title Text 
1  Test  This is a test blog 

ユーザー

id email 
1  [email protected] 

blog_links

私は、ユーザーが評価したブログや自分の格付けを取得したい、このから今
id blog_id user_id rating 
1  1   1   4 

。しかし、私が言ったように私は結果が得られません。誰でも手伝うことができますか?あなたのUserモデルで

答えて

0

/** 
* 
*/ 
public function blogs() 
{ 
    return $this->belongsToMany('App\Blog', 'blog_links', 'user_id', 'blog_id')->withPivot('rating'); 
} 

ブログの関係を定義する次に、あなたのブログのモデルに自分のブログを持つすべてのユーザーを取得するには、ユーザーの関係

/** 
* 
*/ 
public function users() 
{ 
    return $this->belongsToMany('App\User', 'blog_links','blog_id', 'user_id'); 
} 

を定義し、\App\User::with('blogs')->get()

を行うことができます格付け

これがあなたが望むものなのかどうかは分かりませんが、それが助けてくれることを望みます。

+0

素晴らしい作品です。あなたが属していることが分かっていないのですか?サブテーブルを介して多くのことが考えられました.ManyThroughがあったのですか?それとも別の状況で使用されていますか? – Byakku

+0

多対多のリレーションシップがある場合は、ピボットテーブルが必要で、モデルにbelongsToManyを設定する必要があります(https://laravel.com/docs/5.4/eloquent-relationships#many-to-many)。 'has-many-through '関係は、中間関係を介して遠方の関係にアクセスするための便利なショートカットを提供します.'(https://laravel.com/docs/5.4/eloquent-relationships#has-many-through) – Nerea