微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel RouteKeyName 字段在带有连接表的模型实例中不明确

如何解决Laravel RouteKeyName 字段在带有连接表的模型实例中不明确

有人对如何使用 Laravel routeKeyName 的 slug 解决问题有一些想法吗?

我有一个使用列 [slug] 进行路由的模型(幻灯片)。设置如下:

public function getRouteKeyName() {
    return 'slug';
}

同一模型还使用引导功能从相关类别表/模型中获取其他一些相关列。

protected static function boot() {
    parent::boot();
    static::addGlobalScope('content_type',function (Builder $builder) {
        $builder->where('content_types.name','Slide')
                ->join('content_categories','content.id','=','content_categories.content_id')
                ->join('categories','categories.id','content_categories.category_id')
                ->select('content.*','categories.name as category','categories.id as category_id');
    });
}

问题是类别表也有一个 [slug] 列,这意味着 Laravel 的内置 RouteKeyName 功能在为我的编辑路由构建 sql 时会发送“不明确的列名”警告。

不明确的列名“slug”。 (sql: select top 1 [content].*,[categories].[name] as [category],[categories].[id] as [category_id] from [content]inner join [content_types] on [content].[ content_type_id] = [content_types].[id] [content] 上的 [content_categories] 内连接。[id] = [content_categories].[content_id] [categories] 上的内连接 [categories].[id] = [content_categories].[ category_id] 其中 [slug] = when-to-decant--33 和 [content].[deleted_at] 为 null 且 [content_types].[name] = Slide)

我尝试修改 getRouteKeyName 方法以消除歧义:

public function getRouteKeyName() {
   return 'content.slug';
}

这消除了模棱两可的列警告,但引发了一个关于缺少所需路由参数的新错误

缺少 [Route: slide.show] [URI: slides/show/{item}] 的必需参数

我可能只是被卡住了,不得不处理我的 Slide 类别的关系,而不是 join 和 select 方法,但我想我会看看 stackoverflow 上是否有人解决了这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。