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

Laravel Livewire项目关联同步报SQLSTATE[42S22字段不存在错误如何解决

问题原因

你报错的核心原因是两个模型的多对多关联定义中,navigation_menu_id参数前多了一个多余的空格,Laravel会把空格识别为字段名的一部分,自然匹配不到迁移文件里定义的无空格的navigation_menu_id字段。
除此之外你还有多对多外键顺序写反的问题,belongsToMany的第三个参数是「当前模型在中间表的外键」,第四个是「关联模型在中间表的外键」,你现有代码的参数顺序不符合规则。


修正方案

1. 修正NavigationMenu模型的关联代码

class NavigationMenu extends Model {
    protected $primaryKey = 'navigation_menus_id';

    public function navigationType()
    {
        // 第三个参数为当前模型(NavigationMenu)在中间表的外键
        // 第四个参数为关联模型(NavigationMenuType)在中间表的外键
        // 同时删除参数里多余的空格
        return $this->belongsToMany(NavigationMenuType::class,'navigation_menus_navigation_types','navigation_menu_id','navigation_type_id');
    }
}

2. 修正NavigationMenuType模型的关联代码

class NavigationMenuType extends Model{
    protected $primaryKey = 'navigation_menu_types_id';

    public function navigationMenu()
    {
        // 第三个参数为当前模型(NavigationMenuType)在中间表的外键
        // 第四个参数为关联模型(NavigationMenu)在中间表的外键
        // 同时删除参数里多余的空格
        return $this->belongsToMany(NavigationMenu::class,'navigation_menus_navigation_types','navigation_type_id','navigation_menu_id');
    }
}

额外校验项

  • 如果之前已经执行过迁移,确认中间表字段已正确创建,异常情况下可回滚后重新执行迁移:php artisan migrate:rollback && php artisan migrate
  • 控制器内变量seletedNavigationMenu为拼写错误(正确应为selectedNavigationMenu),不影响功能运行仅为代码规范问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:54:01