在 laravel 8 的侧边栏中显示记录数

Posted

技术标签:

【中文标题】在 laravel 8 的侧边栏中显示记录数【英文标题】:Show record counts in sidebar in laravel 8 【发布时间】:2021-04-01 06:47:31 【问题描述】:

我正在用 Laravel 8 编写一个项目。我想在左侧菜单中显示每个菜单的编号。其实我有一个解决办法。将其他模型添加到站点上的所有控件。但这不是正确的方法。有没有替代方案?

例如:

My sidebar menus:
Tools (12)
Users (10)
Settings

我需要将此代码插入到所有控件函数中

$tools_1= Tools1::all()->count();
$users = Users::all()->count();

我也把这段代码写到侧边栏了。

          <li class="nav-item">
            <a href="route('admin.x')" class="nav-link">
              <i class="nav-icon fas fa-warehouse"></i>
              <p>
                Tools
                <span class="badge badge-info right"> $tools_1 </span>
              </p>
            </a>
          </li>
          <li class="nav-item">
            <a href="route('admin.y')" class="nav-link">
              <i class="nav-icon fa fa-car"></i>
              <p>
                Users
                <span class="badge badge-info right"> $users </span>
              </p>
            </a>
          </li>

有没有更合乎逻辑的解决方案?

【问题讨论】:

旁注,不要做::all()-&gt;count();这是将数据库表中的每条记录加载到内存中,然后计算数组元素。一个简单的::count() 将执行 SQL 计数,速度更快,对性能的影响更小。话虽如此,对于 10 或 12 条记录,这微不足道,但对于较大的表,这将产生巨大的差异。 【参考方案1】:

您可以将侧边栏标记移动到部分位置 - 比如说 sidebar.blade.php

然后使用视图编辑器将数据传递到侧边栏。在服务提供者的 boot 方法中注册 View composer - 甚至 AppServiceProvider 都可以。

在视图编辑器中使用缓存来提高性能并限制数据库查询

//In the boot method of service provider
View::composer('sidebar', function ($view) 
    $counts = Cache::remember('counts', 3600, function() 
        return [ 'tools_1' => Tools1::count(), 'users' => User::count() ];
    );

    return $view->with('counts', $counts);
);

//OR you can use a wildcard to share data with multiple views
View::composer('admin.*', function ($view) 
    $counts = Cache::remember('counts', 3600, function() 
        return [ 'tools_1' => Tools1::count(), 'users' => User::count() ];
    );

    return $view->with('counts', $counts);
);

Laravel 文档:

https://laravel.com/docs/8.x/views#view-composers https://laravel.com/docs/8.x/cache#retrieve-store

然后在部分中你可以使用通过视图作曲家传递的数据

<span class="badge badge-info right"> $counts['users'] </span>
<span class="badge badge-info right"> $counts['tools_1'] </span>

【讨论】:

我写的是 admin 而不是侧边栏,它工作。非常感谢。【参考方案2】:

您可以将侧边栏提取到刀片组件并在那里执行查询。 https://laravel.com/docs/8.x/blade#components

【讨论】:

以上是关于在 laravel 8 的侧边栏中显示记录数的主要内容,如果未能解决你的问题,请参考以下文章

Sublime Text 2 - 在侧边栏中显示文件导航

python #SublimeText #Sublime:自动在侧边栏中显示文件

始终在侧边栏中显示所有子页

在WooCommerce产品类别窗口小部件侧边栏中显示产品数量

突出显示Wordpress侧边栏中的当前帖子

(WP) 页脚未显示在新的单个模板和第二个侧边栏中