2016-02-24 5 views
1

У меня есть эти 3 таблицы: users, recipes и votesLaravel 5 соотношение между 3 таблицы

голоса пользователей на рецепте

рецепт имеет много голосов

пользователь имеет много голосов

пользователь может голосовать только один раз за рецепт

На мой взгляд, у меня возникает проблема, когда я пытаюсь получить доступ к рейтингу голосов пользователя по рецепту, например :($recipe->user->vote->rating), он возвращает рейтинг первого голоса этого пользователя (может быть, голос этого пользователя на еще один рецепт)

мои отношения: User.php:

public function vote() 
{ 
    return $this->hasOne('App\Vote'); 
} 

Recipe.php:

public function votes() 
{ 
    return $this->hasMany('App\Vote'); 
} 

Vote.php:

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

public function recipe() 
{ 
    return $this->belongsTo('App\Recipe','recipe_id'); 
} 

ответ

0

Сначала я бы $user->votes отношениях hasMany, так как существует несколько голосов для каждого пользователя. Тогда вы можете создать две области пользовательских запросов на vote модели:

User.php:

public function votes() 
{ 
    return $this->hasMany('App\Vote'); 
} 

Vote.php:

public function scopeByUser($query, $user_id){ 
    return $query->where('user_id',$user_id); 
} 

public function scopeOnRecipe($query, $recipe_id){ 
    return $query->where('recipe_id',$recipe_id); 
} 

Они могут быть использованы как:

$recipe->votes()->byUser($id)->first(); 

$user->votes()->onRecipe($id)->first(); 
+0

, который, как представляется, работать просто отлично, не думал о масштабах. благодаря – user3813360

Смежные вопросы