KiritoLyn
KiritoLyn

Reputation: 760

How to Pass multiple variables to a single view Laravel?

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

Answers (3)

amba patel
amba patel

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

Karthik
Karthik

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

dilusha_dasanayaka
dilusha_dasanayaka

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

Related Questions