双层foreach循环与laravel刀片的条件

时间:2017-12-06 13:36:02

标签: php laravel

我有这样的关系

User->hasMany->reviews
Review->belongsTo->user

Review->hasMany->ReviewAnswer
ReviewAnswer->belongsTo->Review

现在我尝试显示特定评论的答案。我的reviewAnswer表格如下:

Id, review ID, text

但问题在于我这样做:

@foreach($user->reviews as $data)
  @foreach($data->reviewAnswers->where('review_id', $data->id) as $answer)
    {{$answer->text}}
  @endforeach
@endforeach

然后评论显示没问题,但每次评论都会得到相同的答案。如何修复?

2 个答案:

答案 0 :(得分:2)

确保检查所有关系是否正确。在此示例中,我假设您的模型存储在app文件夹中。

首先,您的User模型应该有reviews

public function reviews() {
    return $this->hasMany("App\Review", "user_id", "id");
}

接下来,将Review模型设置为answers

public function answers() {
    return $this->hasMany("App\ReviewAnswer", "review_id", "id");
}

然后,这就是您如何使用usersreviews

获取所有answers
$users = User::with("reviews.answers")->get();

最后,在view

中执行循环
@foreach($users as $user)
    @foreach($user->reviews as $review)
        @foreach($review->answers as $answer)
        @endforeach
    @endforeach
@endforeach

答案 1 :(得分:0)

尝试使用擅长模型为您提供的hasManyThrough()选项。

链接:Laravel Eloquent Relations

这意味着在你的情况下你会添加:

class User extends Model { 
    public function reviewAnswers(
        return $this->hasManyThrough(ReviewAnswer::class,Review::class); 
    )
}

然后只需在刀片中访问它:

@foreach($user->reviewAnswers() as $reviewAnswer) {
    {{$reviewAnswer->text}}
}