【问题标题】:Using a foreach variable in a Laravel view在 Laravel 视图中使用 foreach 变量
【发布时间】: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);

标签: php laravel foreach blade laravel-blade


【解决方案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 时,百分比结果是相同的,意味着什么都没有和现有的,对吧?
    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2019-04-19
    • 1970-01-01
    • 2015-06-27
    • 2017-09-17
    • 2019-07-25
    相关资源
    最近更新 更多