Laravel-在视图中显示一对多关系
问题描述:
我目前正在向我的网站添加一个功能,提出问题并给出多选答案。Laravel-在视图中显示一对多关系
我的回答模式有如下代码:
protected $table = 'answer';
protected $primaryKey = 'answer_id';
protected $fillable = ['question_id'];
public function question()
{
return $this->belongsTo('App\Question','question_id')->distinct();
}
,我的看法是这样的:
@foreach ($answers as $answer)
<h2>{{$answer->question->question}}</h2>
<p>{{$answer->answer}}</p>
@endforeach
我的控制器:
$answers = Answer::with('question')->first()->get();
它显示的是这样的:
question1
答案在这里
问题1
这里回答2
问题1
这里回答3
问题2
2回答这里
问题2
2回答这里2
问题2
2这里3
我想只显示一次的问题答案。我是Laravel新手。
答
你需要翻转这个话,并且首先从DB获得您的问题:
$questions = Question::with('answers')->get();
这当然假定你已经安装在你的问题模型hasMany
关系。
然后在你看来,你将有两个循环:
@foreach ($questions as $question)
<h2>{{$question->question}}</h2>
@foreach ($question->answers as $answer)
<p>{{$answer->answer}}</p>
@endforeach
@endforeach
注意您第一次遍历的问题,并通过回答每个问题一次显示的问题,然后循环。
它现在打印所有的问题,但每个都有一个答案。 问题1 这里问题1回答 问题2 这里问题1回答2 问题3 这里问题1回答3 问题4 question2-回答这里 question5 question2-回答这里2 question6 问题2回答这里3 这是如何设置? public function answer(){ return $ this-> hasMany('App \ Answer','answer_id'); } – Emma
在控制器中执行'dd($ questions)'并检查数据库结果。确保您的关系是正确的,并且您在对视图进行故障排除之前获得预期的结果。 – jszobody
非常感谢你!这是我的关系! :)你提供的代码完美的作品! – Emma