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

Laravel使用addSelect时报stripos()参数1需为字符串却传入对象错误怎么解决

问题原因
  • 核心错误是查询构造器的链式调用结构断裂:你将$mahasiswa=DB::table('MSMHS')->单独拆分到了代码块外部,尾部的->没有后续衔接的调用方法,导致Laravel解析查询参数时,将后续生成的查询对象错误传入要求字符串类型的stripos方法,触发类型报错。
修复方案

将链式调用结构合并为完整连贯的代码即可,修复后完整代码如下:

$mahasiswa = DB::table('MSMHS')
    ->select('nimhsMSMHS','noktpMSMHS','nmmhsMSMHS','tahunMSMHS','kdfakMSMHS','kdjurMSMHS','kdjekMSMHS','tplhrMSMHS','tglhrMSMHS','telhpMSMHS','staklMSMHS','emailMSMHS')
    ->addSelect(['sksMSMHS' => function($query) {
        $query->select('SKSTTHSIPK')
            ->from('HSIPK')
            ->whereColumn('NIMHSHSIPK', 'nimhsMSMHS')
            ->orderBy('THSMSHSIPK', 'DESC')
            ->limit(1);
    }])
    ->where('MSMHS.staklMSMHS', 'A')
    ->where('MSMHS.nimhsMSMHS', '152017015')
    ->get();

如果使用的Laravel版本低于5.6,闭包形式的addSelect可能存在解析兼容问题,可替换为原生查询写法:

$mahasiswa = DB::table('MSMHS')
    ->select('nimhsMSMHS','noktpMSMHS','nmmhsMSMHS','tahunMSMHS','kdfakMSMHS','kdjurMSMHS','kdjekMSMHS','tplhrMSMHS','tglhrMSMHS','telhpMSMHS','staklMSMHS','emailMSMHS')
    ->selectRaw('(SELECT SKSTTHSIPK FROM HSIPK WHERE NIMHSHSIPK = MSMHS.nimhsMSMHS ORDER BY THSMSHSIPK DESC LIMIT 1) as sksMSMHS')
    ->where('MSMHS.staklMSMHS', 'A')
    ->where('MSMHS.nimhsMSMHS', '152017015')
    ->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:33:01