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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:52:31