Reputation: 760
In my controller:
public function index()
{
$userTotal = User::all();
$userActive = User::where('status', '=', 'Active');
$userInactive = User::where('status', '=', 'Inactive');
$userOnAndOff = User::where('status', '=', 'OnAndOff');
return view('member.home')
->with(compact('userTotal'))
->with(compact('userActive'))
->with(compact('userInactive'))
->with(compact('userOnAndOff'));
}
In my view:
<div class="card border-success">
<div class="card-horizontal">
<div class="card-body bg-success">
<p class="card-text text-white bg-success text-md-center"><i class="fas fa-users fa-2x"></i></p>
</div>
<div class="card-body text-success">
<p class="card-text">Registered Member: <strong>{{ $userTotal->count() }}</strong></p>
<p class="card-text">Active Members: <strong>{{ $userActive->count() }}</strong></p>
<p class="card-text">Active Members: <strong>{{ $userActive->count() }}</strong></p>
<p class="card-text">Inactive Members: <strong>{{ $userInactive->count() }}</strong></p>
</div>
</div>
</div>
I am trying to print out count values, is there any better way to code the controller?
Upvotes: 0
Views: 1554
Reputation: 424
Best way to do this by single query and single variable :
public function index()
{
// single query to get total user and status based users count
$data = User::select(DB::raw('COUNT(*) AS total_users'),
DB::raw('SUM(CASE WHEN status = "Active" THEN "Active" END ) AS active_users'),
DB::raw('SUM(CASE WHEN status = "Inactive" THEN "Inactive" END ) AS inactive_users'),
DB::raw('SUM(CASE WHEN status = "OnAndOff" THEN "OnAndOff" END ) AS onoff_users')
)->first();
return view('member.home')->with($data);
}
Use in view file like
<div class="card border-success">
<div class="card-horizontal">
<div class="card-body bg-success">
<p class="card-text text-white bg-success text-md-center"><i class="fas fa-users fa-2x"></i></p>
</div>
<div class="card-body text-success">
<p class="card-text">Registered Member: <strong>{{ $total_users }}</strong></p>
<p class="card-text">Active Members: <strong>{{ $active_users }}</strong></p>
<p class="card-text">Active Members: <strong>{{ $active_users }}</strong></p>
<p class="card-text">Inactive Members: <strong>{{ $inactive_users }}</strong></p>
</div>
</div>
</div>
Hope it helps. Thank you.
Upvotes: 3
Reputation: 5759
Try this,
public function index()
{
$userTotal = User::all();
$userActive = User::where('status', '=', 'Active');
$userInactive = User::where('status', '=', 'Inactive');
$userOnAndOff = User::where('status', '=', 'OnAndOff');
return view('member.home', compact('userTotal','userActive','userInactive','userOnAndOff'));
}
Upvotes: 1
Reputation: 1441
Yes, you can do like this,
return view('viewblade', compact('userTotal','userActive','userInactive','userOnAndOff'));
take a look at this question and it's answers
Upvotes: 5