在 Laravel 视图中使用 foreach 变量
Posted
技术标签:
【中文标题】在 Laravel 视图中使用 foreach 变量【英文标题】:Using a foreach variable in a Laravel view 【发布时间】:2018-05-30 09:54:31 【问题描述】:我的 mysql 表如下所示(相关部分):
student_id (int) | engmins(int) | totalmins(int) | created_at (datetime)
1 | 50 | 100 | 2017-12-15 00:00:00
1 | 20 | 45 | 2017-12-15 00:00:00
我有以下代码:
$students = StudentDetails::with('student','studentschool','classactivity')
->where('class', 1)
->orderBy('studentgrade', 'DESC')
->get();
$calculatePercentage = array();
foreach ($students as $s)
$fetchEngClassPercents= DB::table('ClassActivity')
->select(DB::raw('round((sum(engmins) * 60) / (sum(totalmins) * 60) * 100) as percents'))
->where('created_at', '>=', Carbon::now()->subDays(30))
->where('student_id', '=', $s->student->id)->get();
foreach($fetchEngClassPercents as $f)
$calculatePercentage = $f->percents;
var_dump($calculatePercentage); //Debug purposes
var_dump($calculatePercentage); //Debug purposes
$params = [
'engClassPercentage' => $calculatePercentage,
'studentInfo' => $students,
];
return view('user.classes.engclass.index', $params);
var_dump INSIDE 循环执行 string(2) "43" NULL
var_dump 在循环外执行 NULL
这是它在视图中的外观:
<td>
@foreach($engClassPercentage as $p)
$p->percents
@endforeach
</td>
这在视图中不起作用,它什么也不显示。
由于某种原因,$calculatePercentage 在循环之外保持为空(在之前尝试转储 var 时)。当它在 foreach 循环中时,它会执行查询。
奇怪的是,我在循环之外声明的数组($calculatePercentage)在foreach循环中被分配了变量。
说实话,我现在很迷茫,如果我能得到帮助,我会很高兴的。
【问题讨论】:
尝试像这样使用它 return view('user.classes.engclass.index')->with('engClassPercentage' , $calculatePercentage); 我还有其他通过 $resources 传递的变量,那我该怎么做呢? $params = [ 'engClassPercentage' => $calculatePercentage, 'studentInfo' => $students, ]; return view('user.classes.engclass.index')->with($params); 【参考方案1】:$calculatePercentage 在每个循环中都会被覆盖,将其更改为数组键
$calculatePercentage[] = $f->percents;
然后在你的 foreach 中调用 $params 数组
@foreach($params['engClassPercentage'] as $p)
【讨论】:
当 var_dump 执行 array(1) [0]=> string(2) "67" 跨度> 【参考方案2】:您没有存储在 foreach 循环中计算的值:
因此这些值不会按照您的要求持续存在。
更新代码:
foreach ($students as $s)
$fetchEngClassPercents= DB::table('ClassActivity')
->select(DB::raw('round((sum(engmins) * 60) / (sum(totalmins) * 60) * 100) as percents'))
->where('created_at', '>=', Carbon::now()->subDays(30))
->where('student_id', '=', $s->student->id)->get();
foreach($fetchEngClassPercents as $f)
$calculatePercentage[] = $f->percents; // <-- This line is edited.
【讨论】:
【参考方案3】:改变 $calculatePercentage = $f-percents;喜欢下面。 然后在 foreach 部分将 $p->percents 更改为 $p。
$calculatePercentage[] = $f->percents;
@foreach($engClassPercentage as $p)
$p
@endforeach
【讨论】:
这行得通。但是,现在对所有输入应用相同的计算(即使 student_id 为 2 并且他什么都没有,它显示相同的学生 ID 百分比计算)1。 你能解释得更清楚吗? 你的意思是当 student_id 为 2 和 1 时,百分比结果是相同的,意味着什么都没有和现有的,对吧?以上是关于在 Laravel 视图中使用 foreach 变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 刀片视图中打破 foreach 循环?
如何在控制器传递变量(laravel)中使用刀片进行 foreach
Laravel 5使用刀片模板在视图中调用函数时如何使用参数