2016-09-20 3 views
0

symfonyのバージョン:3.1.3symfonyの3:データベース内のDoctrine店NULL値

私は以下のようなコントローラを持って、それが与える

if($form->isSubmitted() && $form->isValid()) 
{ 
    $parent = $form['parent']->getData(); // the parentID 
    $cName = $form['class']->getData(); 
    $classID= $cName->getId(); // the classID 

    echo $parent . '/' . $classID . '/' . $id; 
    die; 
    // ... 

私が実行した場合さらに

public function studentAddClassAction($id, Request $request) 
{ 
    $em  = $this->getDoctrine()->getManager(); 
    $student= new Student(); 

    // new class object and create the form 
    $classes= $em->getRepository('PIE10Bundle:Classes')->findAll(); 
    $form = $this->createForm(ClassType::class, $classes); 
    $form->handleRequest($request); 

    if($form->isSubmitted() && $form->isValid()) 
    { 
     $parent = $form['parent']->getData(); // the parentID 
     $cName = $form['class']->getData(); 
     $classID= $cName->getId(); // the classID 

     //insert new row to the student table 
     $student->setParentId($parent); 
     $student->setClassId($classID); 
     $student->setUserId($id); 

     $em->persist($student); 
     $em->flush(); 

     $this->addFlash('notice', 
         'Student Updated'); 

     return $this->redirectToRoute('user_students'); 
    } 
    // some other code 
} 

、期待値 - 例の場合17/6/5または関連する結果が正しく表示されていることを意味します。$parent$classID、条件

に10しかし、私は、

$student->setParentId($parent); 
$student->setClassId($classID); 
$student->setUserId($id); 

$em->persist($student); 
$em->flush(); 

を使用してそれらを挿入しようとすると、それがためにNULL値で

enter image description here

に以下のような行を保存しますclassIdおよびuserIdの列ですが、PARENTIDとsetterメソッドは、学生エンティティ

public function setParentId($parentId) 
{ 
    $this->parentId = $parentId; 

    return $this; 
} 

public function setClassId($classId) 
{ 
    $this->classId = $classId; 

    return $this; 
} 

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

    return $this; 
} 

に以下の通りですこれは私のために少し奇妙で、この問題を解決します。他の開発者情報が必要な場合はお知らせください。

おかげ

更新

class Student 
{ 
/** 
* 
* @ORM\ManyToOne(targetEntity="Classes", inversedBy="student") 
* @ORM\JoinColumn(name="classId", referencedColumnName="id") 
*/ 
private $classes; 

/** 
* Get classes 
* 
* @return \PIE10Bundle\Entity\Classes 
*/ 
public function getClasses() 
{ 
    return $this->classes; 
} 

/** 
* @ORM\OneToOne(targetEntity="Users", inversedBy="student") 
* @ORM\JoinColumn(name="userId", referencedColumnName="id") 
*/ 
private $users; 

/** 
* @var int 
* 
* @ORM\Column(name="userId", type="integer", nullable=true) 
*/ 
private $userId; 

/** 
* @var int 
* 
* @ORM\Column(name="id", type="integer", unique=true) 
* @ORM\GeneratedValue(strategy="AUTO") 
* @ORM\Id 
*/ 
private $id; 

/** 
* @var int 
* 
* @ORM\Column(name="parentId", type="integer") 
*/ 
private $parentId; 

/** 
* @var int 
* 
* @ORM\Column(name="classId", type="integer", nullable=true) 
*/ 
private $classId; 
+0

エンティティプロパティの注釈を表示できますか? –

+0

@alex_kalenyuk注釈の更新セクションを確認してください。 – mapmalith

+0

$ student-> setClassId(5)のようなものを試しましたか? –

答えて

7

なぜあなたはエンティティにIDを割り当てるでしょうか? ORM(Doctrineだけでなく)で作業する場合は、IDで操作するのではなく、オブジェクトとモデルで操作してください。

だから、今までではないコードの代わりに

$student->setParentId($parent); 
$student->setClassId($classID); 
$student->setUserId($id); 

行う、あなたは確認する必要があり

$student->setParent($parent); 
$student->setClass($class); 
$student->setUser($user); 

どこ$parent$class$users - 関連するエンティティ。正しくマッピングされていれば、正しく永続化されます。

また、明らかにSymfonyフォームが悪用されています。生徒をクラスに追加するだけの場合は、生徒の新しいオブジェクトを保持しないでください。 $form->submit()を作成すると、クラスのArrayCollectionに学生の新しいインスタンス(追加したい)が追加され、次にpersist()はクラスを保持し、すべてのユーザーにも(cascade="persist"を追加します)。

+0

この回答をありがとう。私の最初のSymfonyプロジェクトに本当に有益な情報 – mapmalith

関連する問題