我试图使用db播种器更新所有数据的列,但我不断得到:未定义数组键1
我检查了foreach上的$key,它的值是0。
Application::chunk(500, function($applications) {
foreach($applications as $application){
$questions = $application->vacancy->questions()->pluck('id')->toArray();
if(!empty($questions)){
foreach ($application->answers ?? [] as $key => $value) {
$value->update(
[
'vacancy_question_id' => $questions[$key]
]
);
}
}
}
});
应用程序和答案的关系
/**
* Get the answers for the application.
*
* @return IlluminateDatabaseEloquentRelationsHasMany
*/
public function answers()
{
return $this->hasMany(Answer::class);
}
$key
在foreach的第一次迭代时只是0
。然后是1
,然后是2
…
当您调用dd($key);
时,它显示0
,然后停止脚本。所以你不会看到你的foreach的其他迭代。如果您希望脚本继续,使用dump($key);
,您将看到$key
是0
,然后是1
…
在某些情况下,它必须是不在$questions
数组中的索引。
Application::chunk(500, function($applications) {
foreach($applications as $application){
$questions = $application->vacancy->questions()->pluck('id')->toArray();
if(!empty($questions)){
foreach ($application->answers ?? [] as $key => $value) {
// These lines will help you identifiy the problem
if(!array_key_exists($key, $questions)){
dd($key.' missing from $questions!', $key, $questions);
}
$value->update(
[
'vacancy_question_id' => $questions[$key]
]
);
}
}
}
});