如何从另一个模型背面加载模型?
希望这应该为我的问题添加一些上下文。我有3个模型。如何从另一个模型背面加载模型?
我的构建模式:
public function buildComment(){
return $this->hasMany('App\buildComment');
}
public function buildQuestion(){
return $this->belongsTo('App\buildQuestion');
}
我buildQuestion型号:
public function build(){
return $this->hasMany('App\Build');
}
buildComments型号:
public function build(){
return $this->belongsTo('App\Build');
}
这里是我的控制器:
public function viewQuestion(buildQuestion $buildQuestion){
$builds = Build::with('buildComment')->get();
return view('pages.questionView',compact('buildQuestion', 'builds'));
}
这里是我的看法:
@foreach($buildQuestion->build as $build)
<ul class="list-group">
<li class="list-group-item clearfix active">Build suggestion by: {{$build->user->name}}</li>
<li class="list-group-item clearfix">Processor: <a href="/parts/cpu/{{$build->processor->id}}">{{$build->processor->name}}</a></li>
<li class="list-group-item clearfix">Graphics Card: <a href="/parts/gpu/{{$build->videoCard->id}}">{{$build->videoCard->name}}</a></li>
<li class="list-group-item clearfix">RAM: <a href="/parts/memory/{{$build->memory->id}}">{{$build->memory->name}}</a></li>
<li class="list-group-item clearfix">Motherboard: <a href="/parts/motherboard/{{$build->motherboard->id}}">{{$build->motherboard->name}}</a></li>
<li class="list-group-item clearfix">Power Supply: <a href="/parts/power-supply/{{$build->powerSupply->id}}">{{$build->powerSupply->name}}</a></li>
<li class="list-group-item clearfix">Storage: <a href="/parts/storage/{{$build->storage->id}}">{{$build->storage->name}}</a></li>
<li class="list-group-item clearfix">Optical Drive: <a href="/parts/optical-drive/{{$build->opticalDrive->id}}">{{$build->opticalDrive->name}}</a></li>
<li class="list-group-item clearfix"><strong>Build Total Price: £{{$build->processor->price + $build->videoCard->price + $build->memory->price + $build->motherboard->price + $build->powerSupply->price + $build->storage->price + $build->opticalDrive->price}}</strong></li>
</ul>
@foreach($build->buildComment as $comment)
{{$comment->body}}
@endforeach
<form action="/build-comment/post/{{$build->id}}" method="POST">
<div class="form-group">
<label for="body">Comment </label>
<textarea class="form-control" name="body"></textarea>
</div>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<button type="submit" class="btn btn-primary">Submit</button>
</form>
@endforeach
我试图获取属于建设的意见。
buildQuestion有很多构建,构建有很多评论。
我该如何表达这一点并检索构建的注释?
您可以在嵌套的预先加载中将它们全部置于一个查询中。
//one buildquestion with all the builds & comments
$buildQuestion = BuildQuestion::with('build.buildComment')->find(1);
return view('pages.questionView',compact('buildQuestion'));
在你看来,你的窝的foreach
@foreach($buildQuestion->build as $build)
//display stuff
@foreach($build->buildComment as $comment)
{{ $comment->body}}
@endforeach
@endforeach
谢谢,这看起来很有希望!但是,我有不同的页面与每个buildQuestions。每个构建问题显示与它们相关的构建,然后显示构建下方的注释。您的答案会导致所有评论显示在构建下方,与构建或不相关。我需要为相关版本显示评论。我认为这与find()有关。 – Rick
然后尝试你以前的查询,但保持双foreach。你必须遍历所有的构建,并循环所有评论。 – EddyTheDove
作品,好人!如果您想查看,我会更新。 – Rick
@foreach($buildQuestion->build as $build)
<ul class="list-group">
<li class="list-group-item clearfix active">Build suggestion by: {{$build->user->name}}</li>
<li class="list-group-item clearfix">Processor: <a href="/parts/cpu/{{$build->processor->id}}">{{$build->processor->name}}</a></li>
<li class="list-group-item clearfix">Graphics Card: <a href="/parts/gpu/{{$build->videoCard->id}}">{{$build->videoCard->name}}</a></li>
<li class="list-group-item clearfix">RAM: <a href="/parts/memory/{{$build->memory->id}}">{{$build->memory->name}}</a></li>
<li class="list-group-item clearfix">Motherboard: <a href="/parts/motherboard/{{$build->motherboard->id}}">{{$build->motherboard->name}}</a></li>
<li class="list-group-item clearfix">Power Supply: <a href="/parts/power-supply/{{$build->powerSupply->id}}">{{$build->powerSupply->name}}</a></li>
<li class="list-group-item clearfix">Storage: <a href="/parts/storage/{{$build->storage->id}}">{{$build->storage->name}}</a></li>
<li class="list-group-item clearfix">Optical Drive: <a href="/parts/optical-drive/{{$build->opticalDrive->id}}">{{$build->opticalDrive->name}}</a></li>
<li class="list-group-item clearfix"><strong>Build Total Price: £{{$build->processor->price + $build->videoCard->price + $build->memory->price + $build->motherboard->price + $build->powerSupply->price + $build->storage->price + $build->opticalDrive->price}}</strong></li>
</ul>
@foreach($build->buildComment as $comment)
{{$comment->body}}
@endforeach
<form action="/build-comment/post/{{$build->id}}" method="POST">
<div class="form-group">
<label for="body">Comment </label>
<textarea class="form-control" name="body"></textarea>
</div>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<button type="submit" class="btn btn-primary">Submit</button>
</form>
@endforeach
我嵌套在其他的foreach @EddyTheDove建议进行此更改后,它的工作。
我想你想要的是'$ buildQuestion-> load(['builds','builds.comments']);' – Ohgodwhy