
当使用 `->first()` 查询数据库未返回结果时,变量为 `null`,直接用 `$var["key"]` 会触发“trying to access array offset on value of type null”错误;需先判空再取值。
该错误本质上是 PHP 7.4+ 引入的严格类型安全机制所致:null 值不支持数组式访问(如 $null["key"]),而 Eloquent 的 first() 在无匹配记录时返回 null,而非空模型或空集合。
在你的代码中:
$evaluationjob = evaluation_elements_jobs::where('job_id', $user->job_id)
->where('company_id', $company_check->id)
->first();
$items = json_decode($evaluationjob["element_degree"]); // ❌ 危险!若 $evaluationjob 为 null,此处直接报错正确做法是分步校验:
- 确保查询结果存在($evaluationjob !== null);
- 确保目标字段存在且非 null(推荐用 isset() 或 array_key_exists());
- 再执行 json_decode()。
✅ 推荐写法(健壮、清晰、符合 Laravel 最佳实践):
立即学习“PHP免费学习笔记(深入)”;
$evaluationjob = evaluation_elements_jobs::where('job_id', $user->job_id)
->where('company_id', $company_check->id)
->first();
if ($evaluationjob && isset($evaluationjob->element_degree)) {
$items = json_decode($evaluationjob->element_degree, true); // 第二个参数 true → 返回关联数组,更易处理
} else {
$items = []; // 或 throw new InvalidArgumentException('Evaluation job or element_degree missing');
}⚠️ 注意事项:
- 使用 $evaluationjob->element_degree(对象属性访问)比 $evaluationjob["element_degree"](数组访问)更符合 Eloquent 模型规范;
- 若 element_degree 字段可能为 null 或空字符串,建议进一步校验:!empty($evaluationjob->element_degree);
- 开发阶段可启用 strict_types=1 并配合 PHPStan/PHP_CodeSniffer 提前捕获此类问题;
- 生产环境应记录缺失数据日志(如 Log::warning('Missing evaluation job', [...])),便于排查业务逻辑异常。
总结:永远不要假设数据库查询必然返回结果。将「判空 → 取值 → 解析」拆解为显式步骤,是编写健壮 PHP/Laravel 代码的基本功。











