Symfony中无关联字段的实体关联查询报错:Documents无data关联
解决Symfony中Doctrine QueryBuilder无关联实体Join报错问题
错误原因
你使用leftJoin('data', 'data')的写法时,Doctrine会默认查找Documents实体中名为data的ORM关联映射,但你的实体并未定义该关联,因此触发报错。
正确实现方式
当两个实体没有预设ORM关联时,需要通过WITH子句手动指定字段关联规则,替代依赖实体关联映射的Join方式:
$builder = $this->em->createQueryBuilder(); $result = $builder->select('documents', 'data') // 按需选择要返回的实体数据 ->from('App:Documents', 'documents') // 手动指定关联实体类,并用WITH定义字段匹配逻辑 ->leftJoin( 'App:Data', 'data', \Doctrine\ORM\Query\Expr\Join::WITH, 'documents.uuid = data.documentId' ) ->andWhere('data.fields = :id') ->setParameter('id', 2) ->getQuery() ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
关键说明
leftJoin的第一个参数必须是完整的实体类别名(如App:Data,与from中的实体写法保持一致)- 通过第四个参数
WITH直接定义两个实体的字段关联规则,无需预先在实体中配置关联映射 - 若仅需
Documents的数据,select中可只保留'documents';若要合并两个实体的字段,则同时指定'documents'和'data' - 确保
documents.uuid与data.documentId的字段类型完全匹配(例如均为字符串类型),避免因类型不匹配导致关联失败
内容的提问来源于stack exchange,提问作者peace_love
相关产品推荐
相关产品推荐

