root09
@root09

Какой тип отношений тут нужен?

Есть таблицы:
Users (id, name)
Articles (id, title)
Favorites_list (id, user_id, article_id)
Article_rating_log (id, user_id, article_id, score)


User Model:
public function favorite_list()
{
     return $this->hasMany('App\Models\FavoriteList');
}

FavoriteList Model:
public function article()
{
     return $this->belongsTo('App\Models\Article');
}

public function user()
{
      return $this->belongsTo('App\Models\User');
}

Есть страница где выводится список избранных статей пользователя ($user->favorite_list), каким образом в этот список можно добавить поле score из таблицы Article_rating_log, т.е рейтинг который поставил пользователь этой статье?
  • Вопрос задан
  • 60 просмотров
Решения вопроса 2
Antonchik
@Antonchik
Программирую на HTML
Class FavoritesList()
{
    public function articleRatingLog()
    {   
        // Нужно указать несколько ключей для корректной связи
        // На обратной стороне также
         return $this->hasOne('App\ArticleRatingLog', ['user_id', 'article_id'], ['user_id', 'article_id']);
    }
}

Потом получать так:
$user->favoriteList[$index]->articleRatingLog->score;
Ответ написан
Комментировать
@miki131
Во первых, мне кажется, что вам не нужна модель FavoriteList. У вас связь ManyToMany между Userи Article.
Также я бы добавил связь ManyToMany между Article и User для учета голосующих и добавил pivot
class Article
{
	public function voters()
	{
		  return $this->belongsToMany('App\Models\User')->withPivot('score');
	}
}

Ну и грузил список вот так
$user
	->with(['favorite', 'favorite' => function($query) use ($user) {
		$query
			->with('voters')
			->where('user_id', $user->id);
	}])
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы