【问题标题】:get $request inside loop. Laravel 5.8在循环中获取 $request。拉拉维尔 5.8
【发布时间】:2019-08-02 04:59:09
【问题描述】:

我有多个答案字段。第一个答案集是 answer0 数组,第二个是 answer1 数组,依此类推。所以我想像 $request->answer0 , $request->answer1 这个。 我需要它在一个 for 循环中。我尝试了类似的方法,但没有得到答案。

for ($i = 0; $i < count($arry); $i++) {
    $qstn = new SurveyQuestions();
    $qstn->question_name = $arry[$i][0];
    $qstn->survey_id = $request->survey_id;
    $qstn->survey_group_id = $groupId;
    $qstn->answer_datatype_id = $arry[$i][1];
    $qstn->question_image_path = $qstnfileNames;
    $qstn->save();

    $qstnId = $qstn->id;

    for ($j = 0; $j < count($request->answer . $j); $j++) {
        $ans = new SurveyQuestionAnswers();
        $ans->survey_question_id = $qstnId;
        $ans->answer = $request->answer1[$j];
        $ans->save();
    }
}

但这给了我错误

Count():参数必须是数组或者实现可数的对象。

echo '<pre>'; print_r($request->answer); // gives me "1"

如果我得到这样的结果( $request->answer0 ),我将能够将特定问题 ID 的答案数组保存到数据库中。

dd($request->all())

array:9 [▼
   "group_name" => "Group 1"
   "survey_id" => "5"
   "question_name" => array:2 [▼
     0 => "q1"
     1 => "q2"
     ]
  "answer_datatype_id" => array:2 [▶]
  "answer1" => array:2 [▼
     0 => "aa"
     1 => "bb"
     ]
  "answer2" => array:2 [▼
     0 => "cc"
     1 => "dd"
     ]
  "group_image_path" => UploadedFile {#394 ▶}
  "question_image_path" => array:2 [▶]
  ]

从上面的输出中,我需要将 q1 的 id 及其对应的 answer1 数组保存在数据库中。然后将 q2 的 id 和 answer2 数组插入数据库等。 提前致谢。

【问题讨论】:

  • 你可以echo '&lt;pre&gt;'; print_r($request-&gt;answer); 更新你的问题吗?
  • 已更新。它给了我“1”。
  • 您可以访问像$request-&gt;answer{$i} 这样的动态变量,并且您的变量应该是一个数组,然后 count 将返回数组中元素的数量。 count((array)$your_object) 返回计数。只是一个快速的建议。
  • 我的答案字段其实是这样的。答案0[],答案1[]。所以当我尝试 dd($request->answer{$i}) 我得到一个 null
  • $i 应该在 for 循环中,增量为 1, answer{$i} $i=0, answer{$i} $i=1

标签: php arrays laravel


【解决方案1】:

你需要循环这样的问题:

foreach($request->question_name as $i =>$name)
$qstn = new SurveyQuestions(); 
$qstn->question_name = $name;
$qstn->survey_id = $request->survey_id;
$qstn->survey_group_id = $groupId;
$qstn->answer_datatype_id = $request->answer_datatype_id[$i] 
$qstn->question_image_path =$this->question_image_path[$i];
$qstn->save();

$qstnId = $qstn->id; 

$name = "answer".$i;
foreach($request->{$name} as $value)
    $ans = new SurveyQuestionAnswers();
    $ans->survey_question_id = $qstnId;
    $ans->answer = $value;
    $ans->save();
}

【讨论】:

  • 只有最后一个答案数组值被插入问题 ID。
  • 你用了什么解决方案?
  • 第一个。有一段时间。
  • @madalimivascu :我在这里错误地使用了 $j 本身而不是 $i,$ans->answer = $request->{$name}[$i];当我纠正它时,问题没有。 7 我有答案 a、b,对于第 8 题,我有选项 x、y。现在在我的数据库中插入问题 7 a 和 x,插入问题 8 b 和 y
  • 你有 answer1 问题 $i =1 的数组?
【解决方案2】:

请求应该是这样的

$request-&gt;answer[0] 不是$request-&gt;answer0

所以在你的刀片或视图中你应该让它像这样

<input name="answer[]" />

在您的控制器中执行此操作

for($j=0;$j<count($request->answer); $j++){
    $ans = new SurveyQuestionAnswers();
    $ans->survey_question_id = $qstnId;
    $ans->answer = $request->answer[$j];
    $ans->save();
    }
  }

【讨论】:

  • 如果我使用这个答案,那么对于第一个问题和第二个问题,只插入第一个问题的答案数组。
猜你喜欢
  • 2021-11-15
  • 2020-08-11
  • 2021-08-25
  • 1970-01-01
  • 2021-12-22
  • 2017-02-07
  • 2021-07-24
  • 1970-01-01
  • 2019-08-07
相关资源
最近更新 更多