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

Laravel Blade仅返回Slug部分内容,求排查问题根源

根据你描述的情况——控制器返回的地点对象里slug就已经是截断后的内容,说明问题肯定出在数据库存储或者数据读取的上游环节,和Blade模板半毛钱关系都没有。下面是几个最可能的原因,你可以按顺序排查:

  • 数据库字段长度不够导致截断
    这是最常见的坑!如果你的slug字段设成了VARCHAR(20)之类的短长度,像anenii-noi-164这种稍长的slug就会被数据库自动砍掉后缀。直接登录数据库工具(比如phpMyAdmin、Navicat),先看表结构里slug字段的长度,再去看原始数据里的slug值是不是完整的——如果数据库里存的本身就只有cahul,那肯定是存储环节出问题了。

  • 数据存入时被代码主动截断
    检查你的Location模型,看看是不是在creating或者updating事件里加了处理slug的逻辑?比如有人可能为了“简化”slug,写了代码只取-前面的部分;或者控制器里存储数据的时候,错误地调用了某个生成slug的方法,把后缀给丢了。比如有没有类似下面这种坑人的代码:

    $location->slug = explode('-', $request->slug)[0];
    
  • 查询时被SQL语句截断
    看看控制器里获取$locations的代码,比如是不是用了selectRaw或者自定义的查询?比如:

    Location::select('id', 'name', DB::raw("SUBSTRING_INDEX(slug, '-', 1) as slug"))->get();
    

    这种写法会直接在SQL层面把slug截断,返回的自然是去掉后缀的版本。

  • 模型访问器搞的鬼
    如果你的Location模型里定义了getSlugAttribute方法,那这个方法会覆盖原始的slug值。比如有人可能写了:

    public function getSlugAttribute($value)
    {
        return explode('-', $value)[0];
    }
    

    这样不管数据库里存的是什么,取出来的都是截断后的slug。

建议先从数据库原始数据查起,这是最快定位问题的办法!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:33:36