Аргумент 1, передаваемый в App \ Entity \ CatalogComment :: setUserId (), должен быть экземпляром App \ Entity \ User или null, если указан int - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь сохранить свой идентификатор в моем отношении ManyToOne, но возвращается ошибка:

Вот как я пытаюсь сохранить данные:

    $user = $this->getUser()->getId();
    $catalogcomment = new CatalogComment();
    $form = $this->createForm(CatalogCommentType::class, $catalogcomment);
    $form->handleRequest($request); 
    if ($form->isSubmitted() && $form->isValid()) {
        $catalogcomment->setUserId($user);
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($catalogcomment);
        $entityManager->flush();

        return $this->redirectToRoute('catalog_index');
    }

И это мой каталог сущностей, связанный с отношением user_id

public function getUserId(): ?User
    {
        return $this->user_id;
    }

    public function setUserId(?User $user_id): self
    {
        $this->user_id = $user_id;

        return $this;
    }

Получена ошибка:

Аргумент 1, передаваемый в App \ Entity \ CatalogComment :: setUserId (), должен быть экземпляром App \ Entity \ User или null, int указан

Что я делаю не так?

Спасибо за ваше время.

1 Ответ

1 голос
/ 11 марта 2019

Я думаю, что вы должны настроить свои сопоставленные отношения в Entity CatalogComment, чтобы не иметь свойства $ userId, а вместо этого свойство $ user, которое должно иметь тип User

class CatalogComment
{
     // ...

     /**
     * @ManyToOne(targetEntity="User")
     * @JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;
}

Вы должны создать геттер иsetter для $ user, а затем вы можете установить пользователя в объекте CatalogComment следующим образом:

$user = $this->getUser();
$catalogComment = new CatalogComment();
$catalogComment->setUser($user);
$em = $this->getDoctrine()->getManager();
$em->persist($catalogComment);
$em->flush();

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

...