【问题标题】:How to Pass multiple variables to a single view Laravel?如何将多个变量传递给单个视图 Laravel?
【发布时间】:2019-07-06 19:44:15
【问题描述】:

在我的控制器中:

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'));
}

在我看来:

<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>

我正在尝试打印计数值,有没有更好的方法来编写控制器代码?

【问题讨论】:

    标签: laravel laravel-5.7


    【解决方案1】:

    通过单个查询和单个变量执行此操作的最佳方法:

        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);
                }
    

    在视图文件中使用,如

    <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>
    

    希望对您有所帮助。谢谢。

    【讨论】:

      【解决方案2】:

      试试这个,

      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'));
          }
      

      【讨论】:

        【解决方案3】:

        是的,你可以这样做,

         return view('viewblade', compact('userTotal','userActive','userInactive','userOnAndOff'));
        

        看看这个question 它的答案

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-21
          • 2015-07-30
          • 2011-10-01
          • 1970-01-01
          • 2019-01-21
          • 1970-01-01
          • 2022-07-08
          相关资源
          最近更新 更多