尝试浏览对象时,为foreach()提供了无效的参数。剑刃-Laravel

时间:2019-12-09 19:00:42

标签: laravel laravel-blade

我正在下载pdf报告,这是相关数据。我正在尝试浏览,但是遇到了麻烦

[ 
   { 
      "id":1,
      "name":"asdfasd",
      "description":"fasdfasdfafa",
      "user_id":1,
      "anonymous":0,
      "created_at":"2019-12-09 10:30:50",
      "updated_at":"2019-12-09 10:33:25",
      "survey_questions":[ 
         { 
            "id":1,
            "question":"asfdasdfsdf",
            "user_id":1,
            "survey_section_id":1,
            "response_type_id":1,
            "optional":0,
            "num":null,
            "rank":null,
            "show_text":0,
            "created_at":"2019-12-09 10:29:27",
            "updated_at":"2019-12-09 10:29:27",
            "pivot":{ 
               "survey_id":1,
               "survey_question_id":1
            }
         }
      ],
      "answer":[ 

      ],
      "evaluation":{ 
         "id":1,
         "survey_id":1,
         "init_date":"2019-12-04 00:00:00",
         "end_date":"2019-12-07 00:00:00",
         "report_date":"2019-12-08 00:00:00",
         "created_at":"2019-12-09 10:30:50",
         "updated_at":"2019-12-09 10:33:25",
         "evaluation_results":[ 

         ]
      }
   }
]

它叫$survey,我尝试做几件事

$survey->name; //works
$survey->survey_questions; //no result when there should be
$survey->evaluation; //works while the survey_questions doesn't

我想访问survey_questions, answer之类的其他内容,然后访问其中的内容。

尝试此操作时,出现上述错误Invalid argument supplied for foreach()

@foreach($survey->survey_questions as $question)
   {{$question}}
@endforeach

这就是我从控制器发送数据的方式

$survey = Survey::with('surveyQuestions', 'answer', 
'evaluation', 'evaluation.evaluationResults')
            ->where('id', $id)->first();

$pdf = App::make('dompdf.wrapper');
$pdf->loadView('pdf.report', ['survey' => $survey]);
return $pdf->stream();

访问此数据的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

我不知道您的first()为什么要给您返回一个数组(如果所有代码都已发布并且没有其他片段),但是如您所见,在JSON中,第一个字符是[,最后一个是],因此您要处理的是一个数组。不确定$survey->name的工作方式如何,相反,您应该做的是访问数组而不是获得所需的值:

$survey[0]->name;
@foreach($survey[0]->survey_questions as $question)
   {{$question}}
@endforeach
...

答案 1 :(得分:1)

我相信您在Survey Model中定义了surveyQuestions()方法,如果是,则您的foreach应该像

@foreach($survey->surveyQuestions as $question)
   {{$question}}
@endforeach

答案 2 :(得分:0)

您应该将数组发送到foreach,但是您发送了json

尝试

@foreach(json_decode ($survey->survey_questions,true) as $question)
   {{$question}}
@endforeach