2017-02-21 22 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 

Теперь от этого я хочу, чтобы получить блоги пользователь рейтинга и их рейтинг , Но, как я уже сказал, я не получаю никаких результатов. Любой, кто может помочь?

ответ

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

Прекрасно работает. Не понимал, что вы можете сделать ownToMany через подтаблицу, я подумал, что это то, для чего был hasManyThrough? Или это используется в другой ситуации? – Byakku

+0

Когда у вас есть много разных отношений, должна быть сводная таблица, и вы устанавливаете отношение в своих моделях с помощью ownToMany, см. (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