Symfony 4.4.5中EntityType误用实体类问题求助
解决Symfony表单中关联字段的语义错误
这个错误确实有点迷惑人——明明你配置的是InputType实体的排序逻辑,错误却指向Answer实体没有name字段。问题的根源其实不在你写的QuestionType表单里,而是出在Question实体的关联映射配置上。
问题本质
错误提示Class App\Entity\Answer has no field or association named name,说明Doctrine在加载Question实体(你的表单绑定的是Question类)时,试图对answers关联集合按照name字段排序,但你的Answer实体根本没有这个字段。
具体解决方案
1. 检查Question实体的answers关联注解
打开App\Entity\Question类,找到answers属性的ORM注解,看看是不是误加了错误的@ORM\OrderBy配置:
// 错误示例:Answer实体不存在name字段,却设置了按name排序 /** * @ORM\OneToMany(targetEntity=Answer::class, mappedBy="question") * @ORM\OrderBy({"name" = "ASC"}) */ private $answers;
把这个错误的@ORM\OrderBy注解删掉,或者改成Answer实体实际存在的字段(比如text、sortOrder这类真实字段):
// 修正后:用Answer实体存在的字段排序 /** * @ORM\OneToMany(targetEntity=Answer::class, mappedBy="question") * @ORM\OrderBy({"text" = "ASC"}) */ private $answers;
2. 清除Doctrine元数据缓存
旧的映射缓存可能会残留错误配置,执行以下命令彻底清除缓存:
php bin/console doctrine:cache:clear-metadata php bin/console cache:clear
3. 确认表单配置无缓存残留
虽然你注释掉了->add('answers'),但清除缓存能确保Symfony加载最新的表单配置,避免旧代码的影响。
做完以上步骤后,刷新页面应该就能解决这个语义错误了。
内容的提问来源于stack exchange,提问作者user4144415
相关产品推荐
相关产品推荐

