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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:42:15