Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 来自控制器数据的Foreach与刀片循环_Php_Laravel_Foreach_Blade - Fatal编程技术网

Php 来自控制器数据的Foreach与刀片循环

Php 来自控制器数据的Foreach与刀片循环,php,laravel,foreach,blade,Php,Laravel,Foreach,Blade,我目前有一个网站,我从数据库中抓取歌曲,循环播放并在页面上显示。我现在需要添加一个选项来预览这首歌的8bar样本,我正努力想把foreach放在foreach里面。我的网页上当前显示以下内容: 我想将节拍放入歌曲容器,但我有一个循环将歌曲容器推出,如下所示: @foreach($tracks as $track) <div class="song-container"> <h2>{{$track->Title

我目前有一个网站,我从数据库中抓取歌曲,循环播放并在页面上显示。我现在需要添加一个选项来预览这首歌的8bar样本,我正努力想把foreach放在foreach里面。我的网页上当前显示以下内容:

我想将节拍放入歌曲容器,但我有一个循环将歌曲容器推出,如下所示:

@foreach($tracks as $track)
            <div class="song-container">
                <h2>{{$track->Title}}</h2>
                <button><a href="/mode-select/fun/freestyle/beatselect/{{$track->id}}?track={{$track->id}}">Select</a></button>
            </div>
@endforeach
@foreach($tracks作为$track)
{{$track->Title}
@endforeach
就在这上面,我有我的节拍:

@foreach($beats as $beat)
<a href="{{$beat->URL}}"><button class="beat-preview">Preview beat</button></a>
@endforeach
@foreach($beats作为$beat)
@endforeach
我是否错过了一些显而易见的痛苦?我只需要将beat foreach制作的锚放到song container div中

请澄清: 我有一个带有ID、标题等的音轨表,然后是与音轨ID相关的节拍表,节拍表有TrackVariantIds(基本上只有8/16/24条URL)

更新:

我整理了我的雄辩模型,现在可以运行以下foreach:

                @foreach($tracks as $track)
            <div class="song-container">
                <h2>{{$track->Title}}</h2>
                @foreach($track->beats as $beat)
                    {{$beat->URL}}
                @endforeach
                    <a href="{{$track}}"><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

    //In my Track Model
    public function beats() {
    return $this->hasMany(\app\Beat::class, 'TrackID', 'id');
}
@foreach($tracks作为$track)
{{$track->Title}
@foreach($track->beats as$beat)
{{$beat->URL}
@endforeach
@endforeach
//在我的轨迹模型中
公共职能{
返回$this->hasMany(\app\Beat::class,'TrackID','id');
}
当我想告诉上面的foreach只取TrackVariantID为1的节拍时,它返回所有三个节拍。有什么想法吗?:)


提前感谢您的帮助

如果我理解正确,你需要这样的东西:

# view file
@foreach($tracks as $oneTrack)
    // ...
    @foreach($oneTrack->samples as $oneSample)
        // ...
    @endforeach
@endforeach


# Model file
class Track extends Base
{

    // define relationshoip
    public function beats() {
        return $this->hasMany('Beat');
    }

    public function samples()
    {
        return $this->with(
            ['beats'=>function($query) {
                // first 8 samples
                return $query->limit(8);
            }];
    );
}
我想在视图、刀片或控制器中没有问题。首先是数据组织(数据库和模型)的问题

未定义的属性: 照亮\数据库\雄辩\集合::$getPreviews

正如错误所说,您试图获取集合上的关系,该关系存在于该集合中的对象(记录)上。 在DB中,您似乎有一对多关系。 因此:


就关系而言,一首歌有很多“节拍”?如果是,那么你可以将
节拍
foreach放置在
曲目
的foreach中,只要你正确设置它们的关系。嘿@Mysteryos-一首曲目有很多节拍是的,但是我在这个页面上只需要8bar变量(正如我的查询所声明的,所以我只需要8bar变量)我只是不确定如何做我的loopsEach beat预览必须有自己的URL。因此,您的
foreach
节拍循环应该这样开始:
@foreach($track->beats as$beat)
。否则,所有曲目都将具有相同的节拍预览。也许你需要在曲目foreach中使用你的beats foreach,并将你的beats foreach更改为foreach($track->getBeats()为$beat)。如果节拍在曲目中,你应该有一些实时曲目->节拍,你应该能够从那里开始工作。我认为你可能对模型的看法是正确的,事实上,我还没有建立起足够尴尬的关系。我将尝试应用这里所做的,我不需要前8个样本,而是所有TrackVariantID为1:)的节拍-谢谢你的帮助!如果有帮助的话,我很高兴:-)但我必须说,最重要的一步是关系(我的示例中的第一种方法)。然后您可以在视图中使用它。如果需要,您可以在我的示例的第二个方法中使用任何sql条件。我对您发送给我的示例进行了修改,但得到了一个错误:未定义的属性:illumb\Database\Eloquent\Collection::$getPreviews(View:songselect.blade.php)这是因为我的雄辩模型关系吗?
//$tracks->beats - is incorrect.
$beats->first()->beats - should be correct.

# and in views:
foreach ($tracks ad $oneTrack):
    $beats = $oneTrack->beats; // is correct.
    //$beats->id // is incorrect
    $id = $beats->first()->id; // correct
    foreach ($beats ad $oneBeat) {
        $bid = $oneBeat; // correct
    }
endforeach;