Laravel7中对config返回数组调用find()报错如何修复
报错原因
config('posts') 读取配置文件得到的是原生PHP数组,并非Eloquent查询返回的模型集合对象,数组不存在find()成员方法,直接调用就会触发该错误。
修复代码
修改PostController@show方法逻辑,将配置数组转为Laravel集合后,用集合提供的匹配方法查找对应id的条目即可,完整代码如下:
public function show($id) { $posts = config('posts'); // 转集合后按id匹配第一条数据 $post = collect($posts)->firstWhere('id', $id); // 匹配不到数据时返回404 if (is_null($post)) { return response()->json(['message' => '资源不存在'], 404); } return response()->json(compact('post')); }
额外说明
- 如果你不想用集合方法,也可以通过原生数组遍历实现匹配:
$post = null; foreach ($posts as $item) { if ($item['id'] == $id) { $post = $item; break; } }
- 请确认
config/posts.php文件结构正确,文件末尾必须return整个文章数组,否则config('posts')会读取到null值:
// config/posts.php 正确结构示例 return [ [ "id" => 1, "name" => "...", "description" => "...", "github_url" => "...", "site_url" => "...", "imgs" => [ "img1" => "...", "img2" => "...", "img3" => "...", ], ], // 其余文章条目 ];
- 如果开启了配置缓存,修改配置后执行
php artisan config:clear命令清除缓存即可生效。
内容的提问来源于stack exchange,提问作者Andrea Pontillo
相关产品推荐
相关产品推荐

