symfony - 给定“字符串”、“App\Entity”类型的预期参数
问题描述
我尝试插入具有 OneToMany-ManyToOne 关系的记录,但出现错误。
Expected argument of type "string", "App\Entity\Question" given.
我有下一个实体question
和answer
.
class Question
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="text")
*/
private $title;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Answer", mappedBy="question", orphanRemoval=true)
*/
private $answers;
public function __construct()
{
$this->answers = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
/**
* @return Collection|Answer[]
*/
public function getAnswers(): Collection
{
return $this->answers;
}
public function addAnswer(Answer $answer): self
{
if (!$this->answers->contains($answer)) {
$this->answers[] = $answer;
$answer->setQuestion($this);
}
return $this;
}
public function removeAnswer(Answer $answer): self
{
if ($this->answers->contains($answer)) {
$this->answers->removeElement($answer);
if ($answer->getQuestion() === $this) {
$answer->setQuestion(null);
}
}
return $this;
}
}
实体Answer
class Answer
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="text")
*/
private $text;
/**
* @ORM\Column(type="boolean")
*/
private $is_correct;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Question", inversedBy="answers")
* @ORM\JoinColumn(nullable=false)
*/
private $question;
public function getId(): ?int
{
return $this->id;
}
public function getText(): ?string
{
return $this->text;
}
public function setText(string $text): self
{
$this->text = $text;
return $this;
}
public function getIsCorrect(): ?bool
{
return $this->is_correct;
}
public function setIsCorrect(bool $is_correct): self
{
$this->is_correct = $is_correct;
return $this;
}
public function getQuestion(): ?question
{
return $this->question;
}
public function setQuestion(?Question $question): self
{
$this->question = $question;
return $this;
}
}
我的表格
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', EntityType::class, array(
'class' => Question::class,
'choice_label' => 'title',
'label' => 'Question'
));
$builder
->add('answers', CollectionType::class, array(
'entry_type' => AnswerType::class,
'entry_options' => array('label' => false),
'allow_add' => true,
'by_reference' => false,
));
$builder
->add('create', SubmitType::class, ['label' => 'Add', 'attr' => ['class' => 'btn btn-primary']]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Question::class
]);
}
我的控制器片段
$question = new Question();
$answer = new Answer();
$question->addAnswer($answer);
$form1 = $this->createForm(QuestionAnswerType::class, $question);
$form1->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($question);
$em->flush();
}
下一行的错误指针
$form1->handleRequest($request);
我知道我的控制器有问题,但我不知道如何解决它。
我不明白如何正确插入具有 OneToMany-ManyToOne 关系的记录。你可以帮帮我吗?
解决方案
我认为您看到此错误的原因是因为在您的Question
课程中您已将该title
字段定义为文本类型 ( @ORM\Column(type="text")
)。
但是,在您的表单中,您已将表单字段定义title
为,EntityType
这就是我认为您看到此错误的原因。
您可以通过更改Question
类中标题字段的数据库映射来解决此问题,或者您可以将表单更改为使用 aTextType
而不是EntityType
希望这可以帮助
推荐阅读
- django - Django makemigrations 命令每次都生成相同的迁移
- c# - System.OutOfMemoryException - Windows 服务自动停止
- string - 解码包含编码模式的字符串
- regex - 如何提取、计算和返回杂乱文本中的数字?
- c# - C#如何声明未知方法类型
- javascript - rxjs 6倒数计时器订阅角度6
- java - SimpleDateFormat.parse() 为格式“YYYY/MMM/d”返回不正确的日期
- selenium - DataTable 和 TestRunner 的黄瓜问题给出错误'java.lang.NoClassDefFoundError: io/cucumber/core/options/FeatureOptions'
- laravel-5 - 在 Laravel 5.8 中的查询中插入查询
- javascript - 如何在 Angular 应用程序中导入 npm 模块?