jeudi 21 janvier 2016

Elegant way to get count of elements in each model (resource) in laravel 5.1

In each menu item I need to display the number of items contained inside. For example:

Users (22)
Posts (57)
Categories (14)
Cities (92)

Tried to do something like this:

App/View/Composers/AddCountOfModels.php:

namespace App\View\Composers;

use Illuminate\View\View;
use App\User;
use App\Post;
use App\Category;
use App\City;

class AddCountOfModels
{
  public function compose(View $view)
  {
    $view->with('count_of', [
      'users' => User::count(),
      'posts' => Post::count(),
      'categories' => Category::count(),
      'cities' => City::count(),
    ]);
  }
}

App/Providers/AppServiceProvider.php:

namespace App\Providers;

use App\View\Composers;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
  public function boot()
  {
    $this->app['view']->composer('_layouts.backend', Composers\AddCountOfModels::class);
  }
}
...

menu.blade.php:

<ul class="sidebar-menu">
  <li class="header">Menu</li>
  <li class="menu-item">Users ({{ $count_of['users'] }})</li>
  <li class="menu-item">Posts ({{ $count_of['posts'] }})</li>
  <li class="menu-item">Categories ({{ $count_of['categories'] }})</li>
  <li class="menu-item">Cities ({{ $count_of['cities'] }})</li>
</ul>

But in first $count_of not passed to the View. And it looks like a clumsy because models can be much more.
Please help find a more beautiful solution.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire