如何消除此列未找到错误?



最初,实体Gut有一个包含字符串的字段reactionreaction的选项被硬连接在一个模板中。通过添加实体Reaction并将Gut表单的reaction更改为EntityType,我现在受到错误消息

的困扰
SQLSTATE[42S22]: Column not found: 1054 Unknown column 't0.reaction' in 'field list'

尽管我已经重写了Gut&Reaction实体。我可能因为树木而忽略了整个森林。下面有什么问题吗?

MySQL表gut:reaction列替换为reaction_id;reaction_id已正确创建;手动创建外键。

这个控制器方法出现错误:

#[Route('/', name: 'app_gut_index', methods: ['GET'])]
public function index(GutRepository $gutRepository): Response
{
$guts = $gutRepository->findBy([], ['happened' => 'DESC']); // error thrown here

return $this->render('gut/index.html.twig', [
'guts' => $guts,
]);
}

Gutentity:


#[ORMId]
#[ORMGeneratedValue]
#[ORMColumn]
private ?int $id = null;
#[ORMColumn(length: 255)]
#[ORMManyToOne(targetEntity: Reaction::class)]
#[ORMJoinColumn(name: 'reaction_id', referencedColumnName: 'id')]
protected $reaction;
#[ORMColumn(length: 255, nullable: true)]
private ?string $description = null;
#[ORMColumn(name: "datetime")]
private ?DateTime $happened = null;
public function getId(): ?int
{
return $this->id;
}
public function getReaction(): ?Reaction
{
return $this->reaction;
}
public function setReaction(?Reaction $reaction): self
{
$this->reaction = $reaction;
return $this;
}
...
}

Reactionentity:


use AppEntityGut;
use AppRepositoryReactionRepository;
use DoctrineORMMapping as ORM;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineCommonCollectionsCollection;
#[ORMEntity(repositoryClass: ReactionRepository::class)]
class Reaction
{
public function __construct()
{
$this->guts = new ArrayCollection();
}
#[ORMId]
#[ORMGeneratedValue]
#[ORMColumn]
private ?int $id = null;
#[ORMColumn(length: 45)]
private ?string $reaction = null;
public function getId(): ?int
{
return $this->id;
}
public function getReaction(): ?string
{
return $this->reaction;
}
public function setReaction(string $reaction): self
{
$this->reaction = $reaction;
return $this;
}
#[ORMOneToMany(targetEntity: Gut::class, mappedBy: 'reaction')]
private $guts;
/**
* @return Collection|Product[]
*/
public function getGuts(): Collection
{
return $this->guts;
}
public function addGut($gut): self
{
$this->guts[] = $gut;
return $this;
}
public function __toString()
{
return $this->getReaction();
}
}

您的$reaction属性不应该同时具有ORMColumnORMJoinColumn注释。

因为这个Doctrine认为它是一个常规列,所以它正在寻找一个基于变量名的数据库字段:$reaction->gut.reaction.

删除#[ORMColumn(length: 255)],然后确保你的数据库中有gut.reaction_id,现在它应该工作了。

作为一个小旁注,我认为你不需要在ORMJoinColumn中使用name: 'reaction_id', referencedColumnName: 'id'因为Doctrine会自动为它们命名

就是放不下。我最终找到了让直觉和反应实体完美结合的方法。我做了什么:

  • 克隆项目
  • 手动删除Gut实体的反应属性;创建,执行迁移
  • 在MySQL中,添加回反应列
  • 使用make:entity Gut在反应上添加反应属性为ManyToOne;进行迁移
  • 使用MySQL从克隆项目的数据库中填充反动_id列
  • (可能在这里错过了一个步骤,但是)gut->getReaction()等,现在表现得像预期的那样-在多对一关系中。

相关内容

  • 没有找到相关文章

最新更新