Doctrine关联查询报错:如何根据指定用户与日期查询Meal实体
解决Doctrine查询关联实体字段的"Unrecognized field"错误
嘿,我来帮你搞定这个问题!你遇到的"Unrecognized field: user.id"错误,是因为Doctrine的findBy()方法不支持user.id这种嵌套字段的写法——它只能识别实体自身直接定义的属性,或者关联关系的属性名(比如user),没法直接通过点语法访问关联实体的字段。
另外还要提醒你:你的Meal实体里存储日期的字段是$day,但你查询时写的是'date' => $date,这个字段名也得改过来,不然同样会报错哦!
下面给你三种可行的解决方案:
方案一:通过关联实体对象查询(最简单)
先获取对应的User实体,再把它作为查询条件传入findBy():
// 先拿到目标User对象 $user = $entityManager->getRepository(App\Entity\User::class)->find($userId); // 用User对象和日期查询Meal $meals = $entityManager->getRepository(App\Entity\Meal::class)->findBy([ 'user' => $user, 'day' => $date ]);
方案二:使用QueryBuilder(更灵活,推荐)
如果需要更复杂的查询逻辑,QueryBuilder是更好的选择,它支持直接用关联实体的ID作为条件:
$meals = $entityManager->getRepository(App\Entity\Meal::class) ->createQueryBuilder('m') ->where('m.user = :userId') ->andWhere('m.day = :date') ->setParameters([ 'userId' => $userId, 'date' => $date ]) ->getQuery() ->getResult();
方案三:使用DQL查询
直接编写Doctrine查询语言来实现需求:
$query = $entityManager->createQuery( 'SELECT m FROM App\Entity\Meal m WHERE m.user = :userId AND m.day = :date' )->setParameters([ 'userId' => $userId, 'date' => $date ]); $meals = $query->getResult();
这三种方法都能解决你的问题,根据你的实际场景选择就行啦~
内容的提问来源于stack exchange,提问作者Laurent
相关产品推荐
相关产品推荐

