Дан ожидаемый аргумент типа "строка", "Приложение \ Сущность"

Я пытаюсь вставить записи с отношениями 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. Не могли бы вы помочь мне?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
2
0
1 685
3

Ответы 3

Я думаю, что причина, по которой вы видите эту ошибку, связана с тем, что в вашем классе Question вы определили поле title как текстовый тип (@ORM\Column(type = "text")).

Однако в вашей форме вы определили поле формы title как EntityType, поэтому я думаю, что вы видите эту ошибку.

Вы можете исправить это, изменив отображение базы данных поля заголовка в вашем классе Questionили, вы можете изменить свою форму, чтобы использовать TextType вместо EntityType

Надеюсь это поможет

Я изменил тип объекта как «строку», но все равно получаю ошибку.

JustName 24.08.2018 11:46

Вы должны взглянуть на ответ Капила, я думаю, это правильный путь.

temp 24.08.2018 12:04

Вы должны внести изменения в двух местах.

1) Первое изменение в классе "Вопрос"

/**
 * @ORM\Column(type = "string")
 */
private $title; 

2) Во-вторых, в вашем классе формы замените «EntityType :: class» на «TextType :: class» и удалите атрибуты «class» и «choice_label» из заголовка.

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('title', TextType::class, array(
            'label' => 'Question'
        ));
    ..... your other code ...   
}

Я понял. Но мне нужно использовать EntityType.

JustName 24.08.2018 12:08

EntityType используется только тогда, когда у вас есть связь с другой таблицей. Здесь поле «заголовок» ни с чем не связано, это простой текстовый тип.

Kapil 24.08.2018 12:10

У меня есть отношения OneToMany-ManyToOne между таблицами вопрос и ответ.

JustName 24.08.2018 12:12

Истинный. Для этого вы использовали "частные ответы $;" . Столбец "заголовок" не связан с другой таблицей. Это независимая колонка. Надеюсь, ты понял. :)

Kapil 24.08.2018 12:15

Что я должен использовать вместо заголовка для EntityType?

JustName 24.08.2018 12:18

Похоже, вам нужен TextType, как предложил @temp.

xabbuh 26.08.2018 22:16

Если вы хотите использовать EntityType, это означает, что вы связываете данные с какой-то другой таблицей. Возьмем пример штата округа. В таблице состояний есть поле countryId, которое можно связать с таблицей страны. Только это поле countryId можно использовать как EntityType. Надеюсь, ты понял.

Kapil 27.08.2018 14:57

В классе Вопрос __toString функция отсутствует

public function __toString()
{
    return $this->property-to-show;
}

Другие вопросы по теме