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
相关产品推荐
相关产品推荐

