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();
}