2015-06-25 19 views
0

我想不能添加到項目實體到用戶添加到項目,因爲它是所有者Symfony的2:用戶實體,因爲它的主人

  • 手動在控制器$item->setOwner($this->getUser());
  • ManyToOne-關係。

FormType中定義的所有內容都會保存,因爲它應該如此,但owner_idNULL。我沒有收到任何錯誤消息。

任何想法?下面的代碼。

在此先感謝!

# src/myBundle/Controller/myController.php 
class myController extends Controller { 
    public function myAction(Request $request) { 
     $item = new Item(); 
     $item->setOwner($this->getUser()); 

     // print_r($this->getUser()); <- prints a valid user 

     $form = $this->createForm(new ItemFormType(), $item); 
     if ($request->isMethod('POST')) { 
      $form->handleRequest($request); 

      if ($form->isValid()) { 
       $em = $this->get('doctrine.orm.default_entity_manager'); 
       $em->persist($item); // saves everything but the owner 
       $em->flush(); 
      } 
     } 

     return $this->render('myBundle:path/to:template.html.twig', array(
      'form' => $form 
     ) 
    } 
} 

-

# src/myBundle/Form/ItemFormType.php 
class ItemFormType extends AbstractType { 
    public function buildForm(FormBuilderInterface $builder, array $options) {    
     $builder->add(...); 
     // ... 
    } 
} 

public function configureOptions(OptionsResolver $resolver) { 
    $resolver->setDefaults(array(
     'data_class' => 'myBundle\Entity\Item' 
    )); 
} 

public function getName() { 
    return 'myItemForm'; 
} 

-

# src/myBundle/Entity/Item.php 
class Item { 
    // ... 
    /** 
     * @ORM\ManyToOne(targetEntity="myBundle\Entity\User") 
     * @ORM\JoinColumn(name="owner_id", referencedColumnName="id") 
     */ 
    protected $owner; 

    // ... 
    // Getter & Setter 
    // ...  
} 

-

# src/myBundle/Entity/User.php 
use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser { 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    public function __construct() 
    { 
     parent::__construct(); 
    } 

    /** 
    * @return mixed 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 
} 
+1

您可能需要顯示完整的ItemType表單類。如果您跳過表單綁定和驗證(或者在表單綁定後顯式設置用戶),它會保持正確嗎? – Ryan

+0

@Ryan:問題解決了。我命名了同一個表「owner」的兩列,第二列用空值重寫了第一列。沒有注意到應有的複製和粘貼。那真是一個恥辱。感謝您的回覆! –

回答

0

問題解決了。不幸的是我沒有更改column-name$deletedBy複製&粘貼$owner。結果:$deletedBy用空值重寫$owner

# src/myBundle/Entity/Item.php 
class Item { 
    // ... 
    /** 
     * @ORM\ManyToOne(targetEntity="myBundle\Entity\User") 
     * @ORM\JoinColumn(name="owner_id", referencedColumnName="id") 
     */ 
    protected $owner; 

    // many more 

    /** 
     * @ORM\ManyToOne(targetEntity="myBundle\Entity\User") 
     * @ORM\JoinColumn(name="owner_id", referencedColumnName="id") <- "owner_id" 
     */ 
    protected $deletedBy; 

    // ... 
    // Getter & Setter 
    // ...  
}