Laravel 5 Laravel 5三个表之间的关系

Laravel 5 Laravel 5三个表之间的关系,laravel-5,Laravel 5,我有三个表格:用户、食谱和投票 用户对配方进行投票 食谱有很多票 一个用户有许多投票权 用户只能对配方投票一次 在我看来,我遇到了一个问题,当我尝试访问某个用户在配方上的投票率时,如:($recipe->user->vote->rating),它返回该用户的第一个投票率(可能是该用户在另一个配方上的投票) 我的关系是: User.php: public function vote() { return $this->hasOne('App\Vote'); } public fun

我有三个表格:
用户
食谱
投票

用户对配方进行投票

食谱有很多票

一个用户有许多投票权

用户只能对配方投票一次

在我看来,我遇到了一个问题,当我尝试访问某个用户在配方上的投票率时,如:(
$recipe->user->vote->rating
),它返回该用户的第一个投票率(可能是该用户在另一个配方上的投票)

我的关系是: User.php

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

public function recipe()
{
    return $this->belongsTo('App\Recipe','recipe_id');
}
public function votes()
{
    return $this->hasMany('App\Vote');
}
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.php

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

public function recipe()
{
    return $this->belongsTo('App\Recipe','recipe_id');
}
public function votes()
{
    return $this->hasMany('App\Vote');
}
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);
}
Vote.php

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

public function recipe()
{
    return $this->belongsTo('App\Recipe','recipe_id');
}
public function votes()
{
    return $this->hasMany('App\Vote');
}
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);
}

首先,我要使
$user->votes
成为一个hasMany关系,因为每个用户有多个投票。然后,您可以在
投票
模型上创建两个自定义查询范围:

User.php

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

public function recipe()
{
    return $this->belongsTo('App\Recipe','recipe_id');
}
public function votes()
{
    return $this->hasMany('App\Vote');
}
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);
}
Vote.php

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

public function recipe()
{
    return $this->belongsTo('App\Recipe','recipe_id');
}
public function votes()
{
    return $this->hasMany('App\Vote');
}
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();

首先,我要使
$user->votes
成为一个hasMany关系,因为每个用户有多个投票。然后,您可以在
投票
模型上创建两个自定义查询范围:

User.php

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

public function recipe()
{
    return $this->belongsTo('App\Recipe','recipe_id');
}
public function votes()
{
    return $this->hasMany('App\Vote');
}
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);
}
Vote.php

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

public function recipe()
{
    return $this->belongsTo('App\Recipe','recipe_id');
}
public function votes()
{
    return $this->hasMany('App\Vote');
}
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();

这似乎很好,没有想到范围。谢谢,这似乎很好用,没想到会有示波器。谢谢