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 (将#修改为@)