laravel - 如何根据首字母显示 View 中的记录?

标签 laravel model-view-controller eloquent laravel-blade

在我的 Controller 中,我按字母顺序将一堆类别传递给 View ,如下所示:

public function index()
    {
        $categories = Category::orderBy('name', 'asc')->get();

        return view('categories')->with('categories',$categories);
    }

在我看来,我希望在与字母表中的字母相对应的单独列中显示每个类别,因此在“A”列中我将显示以 A 开头的所有类别,依​​此类推。

是否可以通过字母过滤 View 中的结果来实现此目的,如果可以,如何实现?

最佳答案

您可以在 Controller 中按首字母对类别列表进行分组,然后将结果传递到您的 View ,操作方法如下:

Controller :

public function index() {

    $categories = Category::orderBy('name', 'asc')->get();

    $groups = $categories->reduce(function ($carry, $category) {

        // get first letter
        $first_letter = $category['name'][0];

        if ( !isset($carry[$first_letter]) ) {
            $carry[$first_letter] = [];
        }

        $carry[$first_letter][] = $category;

        return $carry;

    }, []);

    return view('categories')->with('groups', $groups);
}

查看:

@foreach($groups as $letter => $group)

    <ul>

        <li>{{ $letter }}</li>

        @foreach($group as $category)

            <li>{{ $category['name'] }}</li>

        @endforeach

    </ul>

@endforeach

这是一个工作 example使用array_reduce (与上面Collection::reduce功能相同)

关于laravel - 如何根据首字母显示 View 中的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47971469/

相关文章:

php - laravel Eloquent 一对多关系返回null

php - Laravel ownsToMany() 关系与 all() 或 where() 方法一起使用,而不仅仅是 find()

php - Laravel 5 orderby一对一关系

sql - mySQL中的地理位置:将大型数组放置在哪里,如何正确执行?

php - laravel 4 工作台路由到包

php - 访问 Laravel Queued Job 的负载数据

model-view-controller - IIS7 MVC 部署 - 在某些操作中找不到 404

php - AWS S3 无法通过 PHP SDK 删除存储桶中的对象

asp.net-mvc - 如何在 MVC 中制作短 URL?

c# - MVC 5 存储数据集,以便我可以在调用 AJAX 方法时检索它