为什么当我采用3个数组值时显示错误但是当我只显示1个值时它有效?

时间:2017-10-13 02:13:30

标签: php laravel

当我使用var_dump($paid)时,它会显示所有值 这是代码。如果我使用全部3 description, amount, and payment_type,则会显示错误,该数量未定义。但是,如果我只使用1例如,我只使用description并删除其余的代码将起作用

$paid = array();
        foreach ( $user as $u ) :
            $paidDetail = \App\PaymentTransaction::where('user_id','=', $u->user_id)->get();
            if ($paidDetail->count()) :
                $paid[]['description'] = $paidDetail[0]->description;
                $paid[]['amount'] = $paidDetail[0]->amount;
                $paid[]['payment_type'] = $paidDetail[0]->payment_type;
            endif;  
        endforeach;

    return $paid;

这是视图/刀片显示前端的详细信息

{{ $paid['description'] }}
{{ $paid['amount'] }}
{{ $paid['payment_type'] }}

显示其中的每一个都有效但同时显示所有这些将显示错误,表示第二个值未定义

以下是var_dump($ paid)

  

array(1){[" description"] =>字符串(33)"计划PRO的订阅付款" }
  array(1){[" amount"] => float(350)}
  array(1){[" payment_type"] =>字符串(27)" Stripe Payment Subscription" }
  array(1){[" description"] =>字符串(38)" PRO的测试计划订阅付款" }
  array(1){[" amount"] => float(351)}
  array(1){[" payment_type"] =>字符串(27)" Stripe Payment Subscription" }

2 个答案:

答案 0 :(得分:0)

这只是因为,

foreach循环覆盖 0索引参数以及每次最后一条记录存储在数组中。

在foreach循环的每次迭代中执行查询都可能会降低代码性能。

你应该使用laravel eloquent模型和关系解决这个问题。

https://laravel.com/docs/5.5/eloquent-relationships

答案 1 :(得分:-1)

试试这个:

$paid = array();
$i=0;

foreach ( $user as $u ) :
    $paidDetail = \App\PaymentTransaction::where('user_id','=', $u->user_id)->get();
    if ($paidDetail->count()) :
        $paid[$i]['description'] = $paidDetail[0]->description;
        $paid[$i]['amount'] = $paidDetail[0]->amount;
        $paid[$i]['payment_type'] = $paidDetail[0]->payment_type;
        $i++;
    endif;
endforeach;

return $paid;

代码的主要问题是您忘记在数组上使用索引。添加$i作为索引可确保每个用户付款都有自己的索引。

注意

通过集合并为每个用户执行SQL QUERY并没有错,但也不是一个好习惯。尝试将两者都放在一个SQL Statment中。