Laravel - 将太多变量传递给视图

时间:2017-04-22 07:34:48

标签: php laravel blade laravel-5.4

我在将多个变量从控制器传递到视图/刀片时遇到问题。我使用compact()传递变量,但我认为我已经达到了传递变量的限制因为我已经测试了我的代码,它会在传递 30个变量后停止工作。并且会给出一个错误:“未定义的变量:”虽然已经定义并且完全没有运行,除非我传递超过30个变量。我需要传递许多变量bcoz我正在创建一个图表,图表中的每个值(x,y轴)都是一个不同的变量。有没有其他方法可以做到这一点?我正在考虑为单个视图使用多个控制器。可能吗? 无论如何,这是我的控制器的一个片段:

    $ic15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 0)->where('year_admitted', 2015)->count();
    $cas15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 1)->where('year_admitted', 2015)->count(); 
    $ce15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 2)->where('year_admitted', 2015)->count(); 
    $uep15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 3)->where('year_admitted', 2015)->count(); 
    $ced15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 4)->where('year_admitted', 2015)->count(); 
    $cet15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 5)->where('year_admitted', 2015)->count(); 
    $saec15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 6)->where('year_admitted', 2015)->count(); 
    $cgb15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 7)->where('year_admitted', 2015)->count(); 


        return view('success', compact('col','school', 'total', 'f', 'm', 'ic', 'cas', 'ce', 'uep', 'ced', 'cet', 'saec', 'cgb', 'icf', 'icm', 'casf', 'casm', 'cef', 'cem', 'uepf', 'uepm', 'cedf', 'cedm', 'cetf', 'cetm', 'saecf', 'saecm', 'cgbf', 'cgbm', 'ic13', 'cas13', 'ce13', 'uep13', 'ced13', 'cet13', 'saec13', 'cgb13', 'ic14', 'cas14', 'ce14', 'uep14', 'ced14', 'cet14', 'saec14', 'cgb14', 'ic15', 'cas15', 'ce15', 'uep15', 'ced15', 'cet15', 'saec15', 'cgb15')); 

这只是一个片段,其他变量已在$ic15之前定义。它的定义和使用方式与上面显示的$ic15$cgb15的其他变量一样。

6 个答案:

答案 0 :(得分:1)

我认为紧凑没有这样的限制。但是你可以创建一个新阵列&将这些值放在该数组中

$resultArray = array('school' => $school, 'col' => $col);

并且在视图中使用可以从

获取数据
print_r($resultArray['school']);

答案 1 :(得分:1)

您可以使用view facade的共享方法。

 $total = SchoolStats::where('school_id', $id)->groupBy('college_id')
           ->where('college_id', 0)->where('year_admitted', 2015)
           ->count();
 $school = SchoolStats::where('school_id', $id)->groupBy('college_id')
           ->where('college_id', 0)->where('year_admitted', 2015)
           ->count(); 

 view()->share('total',$total);
 view()->share('school',$school);

 return view('success');

答案 2 :(得分:0)

试试这个:

public function getData($id, $collegeId){
   $year = 2015;
   $school = SchoolStats::where('school_id', $id)
   ->groupBy('college_id')
   ->where('college_id','==', $collegeId)
   ->where('year_admitted','==', $year)
   ->count();
   return view('success', compact('school'));
}

答案 3 :(得分:0)

我认为您可以在视图中传递变量,如:

 return View::make('success', ['col' => $col,
                               'school'=> $school]);

OR

return View::make('success')
            ->with('col', $col)
            ->with('school', $school);

答案 4 :(得分:0)

如果您有许多变量,请尝试将它们放在数组中,如

$final = array();

 $ic15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 0)->where('year_admitted', 2015)->count();
$cas15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 1)->where('year_admitted', 2015)->count(); 
$ce15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 2)->where('year_admitted', 2015)->count(); 
$uep15 = SchoolStats::where('school_id', $id)->groupBy('college_id')->where('college_id', 3)->where('year_admitted', 2015)->count(); 

$final[] = $ic15;
$final[] = $cac15;
$final[] = $ce15;
$final[] = $uep15;

然后在final

中传递一个变量compact

现在可以查看是否要访问变量

假设您希望访问$ic15索引为0,因为$ic15是第一个进入数组的人。

{{ $final[0] }}

如果你想知道什么位置的变量,那么在你的控制器功能dd($final);之前的末尾写return view()

答案 5 :(得分:0)

您必须将它们发送到括号内,更改您的退货声明,如下所示

            return view('success', compact(['col'],['school']));