Laravel雄辩的foreach循环

I am having a foreach loop that goes through an array, and saves data with eloquent. And it works fine when it is like this:

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'] : ''
    ]);

}

But when I add if condition I get undefined variable question error.

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.';
    }
}

If any could help me with that, would very much appreciate that, thanks in advance!

You are not injecting $question into your callback function. You need to use the use keyword:

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

Notice I added the use ($question) bit after function($query)

This allows $question to be accessed within the scope of the callback.

have you tried using firstOrNew() ? Laravel documentation ->

"The firstOrNew method, like firstOrCreate will attempt to locate a record in the database matching the given attributes. However, if a model is not found, a new model instance will be returned. Note that the model returned by firstOrNew has not yet been persisted to the database. You will need to call save manually to persist it."

Example (using your $question value) :

foreach($questions['questions'] as $question) {
 $questionObject = Question::firstOrNew(
                array(
          'external_id' => $question['id'],
          'text' => $question['question_text'],
          'type' => $question['question_type'],
          'image' =>$question['question_image'] 

                )
        );

$questionObject->external_id = $question['id'];
$questionObject->text = $question['text'];
.
.
.
$questionObject->save();

}