我有这样的关系
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
然后评论显示没问题,但每次评论都会得到相同的答案。如何修复?
答案 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");
}
然后,这就是您如何使用users
和reviews
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()选项。
这意味着在你的情况下你会添加:
class User extends Model {
public function reviewAnswers(
return $this->hasManyThrough(ReviewAnswer::class,Review::class);
)
}
然后只需在刀片中访问它:
@foreach($user->reviewAnswers() as $reviewAnswer) {
{{$reviewAnswer->text}}
}