0

Doctrine で Symfony を使用し、DB にデータを挿入しようとしています。私のテーブルには、への外部キーとして設定されているmessages列が 1 つあります。私のエンティティには、このセッターがありますuser_idusers.idMessageuser_id

/**
 * @ORM\Entity
 * @ORM\Table(name="Messages")
 */
class Message {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(name="user_id", type="integer")
     */
    protected $user_id;

    /**
     * @ORM\Column(name="text", type="text")
     */
    protected $text;

    /**
     * @ORM\ManyToOne(targetEntity="User")
     * */
    protected $user;

    public function setText($text) {
        $this->text = $text;
    }

    public function getText() {
        return $this->text;
    }

    public function setUserId($user_id) {
        $this->user_id = $user_id;
    }

    public function getUser_id() {
        return $this->user_id;
    }

    public function getUser() {
        return $this->user;
    }
}

ただし、セッターに渡された変数は挿入されませんが、NULL. 他のすべての列には正しいデータが入力されていますが、これだけを INSERT するのはそうではありません。外部キーと関係があると思います( table に適切なデータが存在しますusers)。

コントローラーコードの一部:

if ($request->getMethod() == 'POST') {
            $form->bind($request);
            if ($form->isValid()) {
                if ($isLogged) {
                    $user = $this->get('security.context')->getToken()->getUser();
                    $message->setUserId($user->getId());
                }
                $em->persist($message);
                $em->flush();

セッターをこれに変更すると、正しく挿入されます:

    public function setUserId($user_id) {
         $this->random_column_which_is_not_foreignkey = $user_id;
    }

どうしたの?ありがとう

4

1 に答える 1

1

JoinColumnを使用する必要があります。

これを試して:

/**
 * @ORM\Entity
 * @ORM\Table(name="Messages")
 */
class Message {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(name="text", type="text")
     */
    protected $text;

    /**
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumn(name="user_id")
     */
    protected $user;

    public function setText($text) {
        $this->text = $text;
    }

    public function getText() {
        return $this->text;
    }

    public function setUser($user) {
        $this->user = $user;
    }

    public function getUser() {
        return $this->user;
    }
}

そしてあなたのコントローラーで:

if ($request->getMethod() == 'POST') {
    $form->bind($request);
    if ($form->isValid()) {
        if ($isLogged) {
            $user = $this->get('security.context')->getToken()->getUser();
            $message->setUser($user);
        }
        $em->persist($message);
        $em->flush();
        // ...
于 2013-10-25T03:18:54.893 に答える