Symfony2 Catchable Fatal Error: установить метод

1

Я пытаюсь написать на db, но я получаю эту ошибку, когда пишу этот код:

public function createAction(Request $request)
{
    $id_user = $request->get('id_user');
    var_dump($id_user);
    $prova = intval($id_user);
    $entity = new UserDigitalPr();

        $em = $this->getDoctrine()->getManager();
        $entity->setIdUser($prova);
        $em->persist($entity);
        $em->flush();



    return $this->render('DtPyramidBundle:UserDigitalPr:new.html.twig', array(
        'entity' => $entity,
    ));
}

Это ошибка: Catchable Fatal Error: аргумент 1, переданный в Dt\PyramidBundle\Entity\UserDigitalPr :: setIdUser() должен быть экземпляром Dt\EcBundle\Entity\User, целочисленным данным, вызываемым в /var/www/it. virtuego.com/src/Dt/PyramidBundle/Controller/UserDigitalPrController.php в строке 70 и определен

В моей сущности у меня это:

class UserDigitalPr
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 *
 * @var integer
 * @ORM\OneToOne(targetEntity="Dt\EcBundle\Entity\User", inversedBy="digitalpr")
 * @ORM\JoinColumn(name="id_user", referencedColumnName="id")
 */
private $id_user;

/**
 *
 * @var integer
 * @ORM\OneToOne(targetEntity="Dt\EcBundle\Entity\User", inversedBy="imtheboss")
 * @ORM\JoinColumn(name="become_from", referencedColumnName="id")
 */
private $become_from;

/**
 * Set id_user
 *
 * @param \Dt\EcBundle\Entity\User $idUser
 * @return UserDigitalPr
 */
public function setIdUser(\Dt\EcBundle\Entity\User $idUser = null)
{
    $this->id_user = $idUser;

    return $this;
}

/**
 * Get id_user
 *
 * @return \Dt\EcBundle\Entity\User 
 */
public function getIdUser()
{
    return $this->id_user;
}

/**
 * Set become_from
 *
 * @param \Dt\EcBundle\Entity\User $becomeFrom
 * @return UserDigitalPr
 */
public function setBecomeFrom(\Dt\EcBundle\Entity\User $becomeFrom = null)
{
    $this->become_from = $becomeFrom;

    return $this;
}

/**
 * Get become_from
 *
 * @return \Dt\EcBundle\Entity\User 
 */
public function getBecomeFrom()
{
    return $this->become_from;
}
}

В User Entity у меня есть следующее:

/* ######################################################################## */
/* #############          Tabella user_digital_pr              ############ */
/* ######################################################################## */

/**
 * @ORM\OneToOne(targetEntity="Dt\PyramidBundle\Entity\UserDigitalPr", mappedBy="id_user")
 * */
private $digitalpr;

/**
 * L'utente che ha promosso un'altro utente a digital pr
 * @ORM\OneToOne(targetEntity="Dt\PyramidBundle\Entity\UserDigitalPr", mappedBy="become_from")
 */
private $imtheboss;

И метод getter/setter:

  /**
 * Set digitalpr
 *
 * @param \Dt\PyramidBundle\Entity\UserDigitalPr $digitalpr
 * @return User
 */
public function setDigitalpr(\Dt\PyramidBundle\Entity\UserDigitalPr $digitalpr = null) {
    $this->digitalpr = $digitalpr;

    return $this;
}

/**
 * Get digitalpr
 *
 * @return \Dt\PyramidBundle\Entity\UserDigitalPr 
 */
public function getDigitalpr() {
    return $this->digitalpr;
}

/**
 * Set imtheboss
 *
 * @param \Dt\PyramidBundle\Entity\UserDigitalPr $imtheboss
 * @return User
 */
public function setImtheboss(\Dt\PyramidBundle\Entity\UserDigitalPr $imtheboss = null) {
    $this->imtheboss = $imtheboss;

    return $this;
}

/**
 * Get imtheboss
 *
 * @return \Dt\PyramidBundle\Entity\UserDigitalPr 
 */
public function getImtheboss() {
    return $this->imtheboss;
}
Теги:
doctrine2
symfony2-forms

2 ответа

0
Лучший ответ

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

    // your entity namespace 
    $userObj = $em->getRepository("DtPyramidBundle:User")->find($id_user);
    $entity = new UserDigitalPr();

    $em = $this->getDoctrine()->getManager();
    $entity->setIdUser($userObj);
    $em->persist($entity);
    $em->flush();

Надеюсь, что эта помощь

  • 0
    '$ id_user = $ request-> get (' id_user '); var_dump ($ id_user); $ userObj = $ em-> getRepository ("DtPyramidBundle: UserDigitalPr") -> find ($ id_user) $ entity = new UserDigitalPr (); $ em = $ this-> getDoctrine () -> getManager (); $ Entity-> setIdUser ($ userObj); $ Em-> сохраняются ($ лица); $ Em-> заподлицо ();» Я редактирую, но получаю сообщение об ошибке Parse Error: синтаксическая ошибка, неожиданная ошибка '$ entity' (T_VARIABLE) в строке $ entity = new UserDigitalPr (); ... Почему?? @Matteo
  • 1
    Привет @ LucaM Я скучаю по ; :) но проверьте правильность пространства имен сущности, переданного в методе getRepository
Показать ещё 2 комментария
0

Вы не можете передать числовое значение в setIdUser, вы должны передать ссылку на сущность. Это можно сделать, сначала извлекая объект, а затем установив его как параметр.

Но если вам просто нужна сущность для установки этого значения, вы также можете передать ссылку на объект:

$em = $this->getDoctrine()->getManager();
$entity->setIdUser($em->getReference($user_id));
$em->persist($entity);
$em->flush();

Кстати, соответствующее поле объекта не должно называться $id_user, поскольку оно не содержит идентификатора пользователя (с точки зрения вашего кода), а фактического объекта пользователя. То, что нужно использовать ORM.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню