You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中Category::find()返回null但数据库存在对应记录如何修复

问题原因
  • Category模型启用了SoftDeletes软删除特性,find()方法默认会过滤deleted_at字段不为空的记录,就算数据库物理存储了对应ID的记录,只要被标记为软删除就会返回null,这是最常见的诱因。
  • 你后续执行的Category::where('cat_id', 25)只返回了查询构造器对象,没有调用first()/get()执行查询,不能证明对应数据可被正常查询到。
  • 小概率原因是项目配置的数据库和你查看数据的数据库不是同一个,或者表前缀配置不匹配,导致查询的表不对。
修复步骤
  1. 先验证是否为软删除导致的问题,执行以下调试代码:
dd(
    Category::withTrashed()->find(25),
    Category::withTrashed()->find(24),
    Category::withTrashed()->find(23),
    Category::withTrashed()->find(22)
);
- 如果上述代码能返回正常的分类对象,说明数据确实被软删除了:
  - 属于误删的话,执行`Category::withTrashed()->find(对应ID)->restore()`恢复对应分类即可
  - 如果业务需要查询已软删除的分类,把原有代码里的`Category::find()`替换为`Category::withTrashed()->find()`即可
- 如果上述代码仍然返回null,检查项目`.env`和`config/database.php`里的数据库配置,确认连接的数据库、表前缀和你实际查看的数据库一致。
  1. 优化代码避免同类报错:后续调用模型属性前先判断对象是否存在,防止空对象报错:
public function index()
{
        $args = [];
        $args = array_merge($args, $this->data_creator(35, 12, 'book'));
        $args = array_merge($args, $this->data_creator(37, 12, 'kit'));
        $args = array_merge($args, $this->data_creator(38, 12, 'game'));

        $args['menu_links'] = [
            'books'     => ($cat = Category::find(25)) ? route('shopping-products.category', $cat->slug) : '#',
            'videos'    => ($cat = Category::find(24)) ? route('shopping-products.category', $cat->slug) : '#',
            'kits'      => ($cat = Category::find(23)) ? route('shopping-products.category', $cat->slug) : '#',
            'games'     => ($cat = Category::find(22)) ? route('shopping-products.category', $cat->slug) : '#',
        ];
    
        return view('frontend.shop.products.index', $args);
}

内容的提问来源于stack exchange,提问作者user9277271

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 01:06:05