Laravel关联查询指定列报错求助(MongoDB驱动)
解决Laravel MongoDB关联查询select时的TypeError异常
问题场景
使用PHP 8.1.18、Laravel 9.52.7 + jenssegers/laravel-mongodb驱动,执行以下代码时触发TypeError:
Project::with(['skills' => function($q) { $q->select('_id', 'name'); }])->first();
异常信息为:TypeError: Illuminate\Database\Query\Builder::addBinding(): Argument #1 ($value) must be of type array, string given
解决方案
方案1:改用MongoDB驱动专属的project方法指定投影字段
jenssegers/laravel-mongodb针对MongoDB的投影操作做了适配,推荐使用project替代原生select:
Project::with(['skills' => function($q) { $q->project(['_id' => 1, 'name' => 1]); }])->first();
方案2:确保select包含关联必需的外键字段
如果坚持使用select,必须包含关联匹配所需的外键(比如project_id,根据你的关联定义调整),否则驱动无法完成关联匹配,触发参数错误:
// 假设skills关联的外键为project_id Project::with(['skills' => function($q) { $q->select('_id', 'name', 'project_id'); }])->first();
方案3:检查关联模型的继承类
确保Skill模型继承的是MongoDB驱动的Eloquent类,而非原生Laravel Eloquent:
use Jenssegers\Mongodb\Eloquent\Model; class Skill extends Model { // 模型定义 }
原因说明
jenssegers/laravel-mongodb的查询构造器对select方法的参数处理逻辑和原生SQL构造器不同,直接传入单个字段字符串会导致驱动将其错误识别为绑定参数,触发类型错误;project方法是专门为MongoDB投影设计的API,能正确处理字段选择。另外,若遗漏关联外键,驱动无法完成关联关系匹配,也会引发内部逻辑错误。
内容的提问来源于stack exchange,提问作者felixkpt
相关产品推荐
相关产品推荐

