繁体   English   中英

Laravel 8 在视图中使用 group by/blade by foreach

[英]Laravel 8 using group by in view/blade by foreach

我的controller中有这段代码:

public function videoGallery()
{
    $videoLinksRecord = VideoLinks::all()->sortBy('video_category_id')->groupBy('video_catetgory_id');

    return view('video.gallery')->with('videoLinksRecord', $videoLinksRecord);
}

返回此查询:

{
    "1": [
        {"id":1,"video_category_id":1,"name":"Laszlo - Supernova","link":"PKfxmFU3lWY","description":"one loud banger!","home_video":null,"created_at":"2020-12-31T14:12:13.000000Z","updated_at":"2020-12-31T14:12:13.000000Z","deleted_at":null},
        {"id":2,"video_category_id":1,"name":"Subtact - Restart","link":"M5A46A2txC4","description":"one loud banger!","home_video":null,"created_at":"2020-12-31T14:12:13.000000Z","updated_at":"2020-12-31T14:12:13.000000Z","deleted_at":null},
        {"id":3,"video_category_id":1,"name":"Sushi Killer & Kevin Villeco - Anime Bae","link":"YHHjfYxLyuA","description":"one loud banger!","home_video":null,"created_at":"2020-12-31T14:12:13.000000Z","updated_at":"2020-12-31T14:12:13.000000Z","deleted_at":null},
        {"id":4,"video_category_id":1,"name":"Hyper Potions & Subtact - Adventures","link":"TKZUhs9Gcdo","description":"one loud banger!","home_video":null,"created_at":"2020-12-31T14:12:13.000000Z","updated_at":"2020-12-31T14:12:53.000000Z","deleted_at":null}
    ],
    "2": [
        {"id":5,"video_category_id":2,"name":"Laszlo - Supernova","link":"PKfxmFU3lWY","description":"one loud banger!","home_video":null,"created_at":"2020-12-31T14:12:13.000000Z","updated_at":"2020-12-31T14:12:13.000000Z","deleted_at":null},
        {"id":6,"video_category_id":2,"name":"Subtact - Restart","link":"M5A46A2txC4","description":"one loud banger!","home_video":null,"created_at":"2020-12-31T14:12:13.000000Z","updated_at":"2020-12-31T14:12:13.000000Z","deleted_at":null},
        {"id":7,"video_category_id":2,"name":"Sushi Killer & Kevin Villeco - Anime Bae","link":"YHHjfYxLyuA","description":"one loud banger!","home_video":null,"created_at":"2020-12-31T14:12:13.000000Z","updated_at":"2020-12-31T14:12:13.000000Z","deleted_at":null}
    ]
}

我想显示按类似于此blade的视频类别分组的结果:

{{-- name of the category --}}
<h2 class="poppins-medium text-lg text-darkergreen text-center">Video Category Name Here</h2>
<div class="container-fluid">
    <div class="row">
        <div class="col-4"></div>
        <div class="col-4 borderline-darkergreen-md"></div>
        <div class="col-4"></div>
    </div>
</div>
{{-- loop for each result sharing the same "video_category_id" --}}
<div class="container-fluid">
    <div class="row d-flex justify-content-center px-0">
        <div class="col col-lg-2 d-none d-lg-block d-xl-none"></div>
        <div class="col col-xl-2 d-none d-xl-block"></div>
        {{-- video --}}
        <div class="col-12 col-md-6 col-lg-4 container-fluid d-flex justify-content-center spacer-md">
            <div class="row d-flex justify-content-center">
                <div class="col-12 d-flex justify-content-center container-fluid px-0">
                    {{-- video border --}}
                    <div class="video-box-border position-relative spacer-md">

                        <a href="">
                            {{-- video card image --}}
                            <div class="video-image position-absolute"></div>
                            {{-- video card background --}}
                            <div class="video-card"></div>
                        </a>
                    </div>
                </div>
                <div class="container-fluid">
                    <div class="row">
                        <div class="col-2 px-0"></div>
                        <div class="col-8 borderline-darkergreen-sm px-0"></div>
                        <div class="col-2 px-0"></div>
                    </div>
                </div>
                {{-- video name--}}
                <p class="poppins-normal text-md text-gray text-center">Video Name Here
                </p>
            </div>
        </div>
    </div>
</div>

我应该如何在foreach逻辑中使用$videoLinksRecord来按其groupBy逻辑显示它? 这是我第一次对查询结果进行分组,所以我不知道如何为所述期望结果构建逻辑。

编辑下面的代码是model中的关系代码:

视频链接 Model:

public function categories()
    {
        return $this->hasMany(VideoCategories::class);
    }

视频分类 Model:

public function links()
    {
        return $this->belongsTo(VideoLinks::class);
    }
@foreach ($videoLinksRecords as $video_category_id => $videoLinks)
    {{ $video_category_id }}
    @foreach ($videoLinks as $videoLink)
        {{ $videoLink->id }}
        {{ $videoLink->video_category_id }}
        {{ $videoLink->name }}
        {{ $videoLink->link }}
        {{ $videoLink->description }}
        {{ $videoLink->home_video }}
        {{ $videoLink->created_at }}
        {{ $videoLink->updated_at }}
        {{ $videoLink->deleted_at }}
    @endforeach
@endforeach

VideoLinksVideoCategory模型之间的关系应如下所示

# VideoLinks model

public function category()
{
    // 2nd parameter is optional if you follow the naming conventions
    return $this->belongsTo(VideoCategory::class, 'video_category_id');
}

在您的查询中,使用with('category')急切加载关系,然后按类别名称分组,最后将 all() 替换为 get()。

$videoLinksRecord = VideoLinks::with('category')->get()->sortBy('video_category_id')->groupBy('category.name');
@foreach ($videoLinksRecords as $category_name => $videoLinks)
    {{ $category_name }}
    @foreach ($videoLinks as $videoLink)
    ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM