Foreach使用刀片从控制器数据循环

时间:2016-02-12 10:48:11

标签: php laravel foreach blade

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

The markup my loops are producing

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

@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($beats as $beat)
<a href="{{$beat->URL}}"><button class="beat-preview">Preview beat</button></a>
@endforeach

我错过了一些非常明显的东西吗?我只需要将由beat foreach产生的锚点放入歌曲容器div中。

澄清: 我有一个带有ID,标题等的轨道表,然后是与轨道ID有关系的Beat表,Beat表有TrackVariantIds(基本上只有8/16/24条URL)。

更新

我对我的Eloquent模型进行了排序,现在可以运行以下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只采用TrackVariantID为1的那些时,这将返回所有三个节拍。任何想法? :)

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

# 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);
            }];
    );
}

我认为这在视图,刀片或控制器中不是问题。这是一个数据组织(数据库和模型)的问题。

答案 1 :(得分:0)

  

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

正如错误所说,您正在尝试获取集合上的关系,该集合中的对象(记录)上存在关系。 看来你在DB中有一对多的关系。 所以:

//$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;