Laravel雄辩的foreach循环

Mar*_*rco 1 php foreach php-closures laravel

我有一个遍历数组的foreach循环,并以雄辩的方式保存数据.它是这样的:

foreach($questions['questions'] as $question) {

    $questionObject = Question::create([
      'external_id' => $question['id'],
      'text' => $question['question_text'],
      'type' => $question['question_type'],
      'image' => (array_key_exists('question_image', $question)) ?
          $question['question_image'] : ''
    ]);

}
Run Code Online (Sandbox Code Playgroud)

但是当我添加if条件时我得到未定义的变量问题错误.

foreach($questions['questions'] as $question) {

    if(!$question = Question::where('id', $question['id'])->where(
        function($query){
            $query->where('updated_at','<', $question['updated']);
        }})->first()) {

        $questionObject = Question::create([
            'external_id' => $question['id'],
            'text' => $question['question_text'],
            'type' => $question['question_type'],
            'image' => (array_key_exists('question_image', $question)) ?
                $question['question_image'] : ''
        ]);
    } else {
        return 'Question: '.$question['external_id'].' already exist.';
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有任何可以帮助我,非常感谢,提前谢谢!

swa*_*ins 5

你没有注入$question你的回调函数.您需要使用use关键字:

if(!$question = Question::where('id', $question['id'])->where(function($query) use ($question) { $query-  >where('updated_at','<', $question['updated']); })->first()) {
Run Code Online (Sandbox Code Playgroud)

注意我之后加了use ($question)一下function($query)

这允许$question在回调范围内访问.