我在使用特定的雄辩查询时遇到了麻烦,无法终生解决。
我正在尝试获取数据库中具有的节拍的8小节预览,该节拍的相关性如下:Beat.TrackId-> Track.id。歌曲的不同小节的存储方式如下:Beat.TrackVariantID。
我目前有以下代码:
//My controller
$genres = Genre::all();
$tracks = Track::all();
$beats = Beat::where('TrackVariantID', 1)->get();
return view('play.forfun.songselect')->with('genres', $genres)->with('tracks', $tracks)->with('beats', $beats);
我的看法 :
@foreach($tracks as $track)
<div class="song-container">
<h2>{{$track->Title}}</h2>
@foreach($track->beats as $beat)
{{$beat->URL}}
@endforeach
<a href=""><button class="beat-preview">Preview beat</button></a>
<button><a href="/mode-select/fun/freestyle/beatselect/{{$track->id}}?track={{$track->id}}">Select</a></button>
</div>
@endforeach
我的节拍模型:
<?php namespace app;
use Illuminate\Database\Eloquent\Model;
class Beat extends Model {
/************
* Generated *
*************/
protected $table = 'Beat';
protected $fillable = [
'id',
'TrackId',
'TrackVariantID',
'SelectedCount',
'CreditCost',
'URL'
];
public function track() {
return $this->belongsTo(\app\Beat::class, 'TrackId', 'id');
}
}
我可以获取节拍网址,但我不仅可以获取Beat.TrackVariantID为1的节拍网址,我似乎可以全部获取这三个网址。
<div class="song-container">
<h2>Glory</h2>
https://s3-eu-west-1.amazonaws.com/20dollarbeats/8bar/8b_eastcoast.mp3
https://s3-eu-west-1.amazonaws.com/16b_eastcoast.mp3
https://s3-eu-west-1.amazonaws.com/24b_eastcoast.mp3
<a href="">
<button class="beat-preview">Preview beat</button></a>
<button><a href="/mode-select/fun/freestyle/beatselect/3?track=3">Select</a></button>
</div>
任何帮助将不胜感激,对于Laravel位人员,我还是一个相对较新的人。
谢谢
首先,由于要遍历所有曲目并显示它们的相关节拍,因此您希望急于加载曲目的节拍。通过消除N + 1问题,可以提高性能。
渴望加载:
$tracks = Track::with('beats')->get();
现在,如果您只需要TrackVariantID为1的节拍,则可以将此限制添加到您急切的加载中:
$tracks = Track::with(['beats' => function ($query) {
// $query is the query for the beats related to the tracks
$query->where('TrackVariantID', '=', 1);
})->get();
鉴于上述对您急切加载的限制,当您执行时$track->beats
,您只会获得与TrackVariantID为1的与该曲目相关的节拍。
顺便说一句,我不知道这是否是您输入的错字,但您track()
在Beat
模型上的关系与错误的模型有关。该功能应为:
public function track() {
return $this->belongsTo(\app\Track::class, 'TrackId', 'id');
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句