我有一个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'] : ''
]);
}但是,当我添加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.';
}
}如果有人能帮我做这件事,我会非常感激的,谢谢!
发布于 2016-03-09 17:59:07
您没有将$question注入回调函数。您需要使用use关键字:
if(!$question = Question::where('id', $question['id'])->where(function($query) use ($question) { $query- >where('updated_at','<', $question['updated']); })->first()) {注意,我在use ($question)后添加了function($query)位
这允许在回调范围内访问$question。
发布于 2016-03-09 18:33:55
您试过使用firstOrNew()吗?Laravel文档->
“firstOrNew方法(如firstOrCreate )将尝试在数据库中找到与给定属性相匹配的记录。但是,如果找不到模型,将返回一个新的模型实例。请注意,firstOrNew返回的模型尚未持久化到数据库中。您需要手动调用保存以持久保存它。”
示例(使用$question值):
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();
}https://stackoverflow.com/questions/35899028
复制相似问题