我的代码存在一些问题。我无法在For语句之外获取变量status
值。我试图回应它,它什么也没做。
这是我的代码:
public function handlequiz()
{
$datetime = Date("Y-m-d, h:m:s");
$parameter = DB::table('parameter')->first();
$countchoice = $parameter->multiplechoice;
$customer_answer = new CustomerAnswer;
for ($i=0; $i <= $countchoice; $i++)
{
$radio = Input::get('radio'.$i);
$status = DB::table('quiz_answers')->where('answerid', '=', $radio)->lists('status');
}
$answerimplode = implode(";", $status);
$customer_answer->email = Input::get('email');
$customer_answer->cust_id = Input::get('id');
$customer_answer->multiplechoice = $answerimplode;
$customer_answer->save();
return Redirect::to('quiz')->with('message', FlashMessage::DisplayAlert('Your answer has been submitted.', 'info'));
}
我试图在内部vardump $status
,因为它返回一个数组,所以我内爆它。但在for{}
之外它什么也没有返回。
有什么建议可以解决这个问题吗?
答案 0 :(得分:0)
你的for循环每次迭代都会覆盖$status
变量。因此,如果最后一次迭代没有找到状态值,那么$status
变量将是一个空数组,当它被内爆时,会给你一个空字符串。
我假设quiz_answers.answerid
应该是唯一的,并且您正在尝试为每个无线电选择获取一个状态。如果您的quiz_answers
查询只应返回每answerid
条一条记录,那么您可能正在寻找pluck()
方法,而不是lists()
方法。
$status = array();
for ($i=0; $i <= $countchoice; $i++)
{
$radio = Input::get('radio'.$i);
// add the 'status' value to the $status array
// pluck gets the value of the field from the first result, whereas
// lists would return an array with the value from all the results
$status[] = DB::table('quiz_answers')->where('answerid', '=', $radio)->pluck('status');
}
// use array_filter to remove any empty values in the $status array
$answerimplode = implode(";", array_filter($status));
答案 1 :(得分:0)
作为优化,请使用whereIn
函数
radios = array();
for ($i=0; $i <= $countchoice; $i++)
$radios[] = Input::get('radio'.$i);
$status = DB::table('quiz_answers')->whereIn('answerid',$radios)->lists('status');
$answerimplode = implode(";", $status);