2013-06-02 68 views
0

我有三個實體:PurchaseOrder,Article和ArticleOrderReference。我需要ArticleOrderReference實體爲每條訂單提供一個整數值。FormType實體:已經使用

所以一個purchaseOrder可以有很多ArticleOrderReferences。一篇文章也可以有很多ArticleOrderReferences。

我的問題是,每個ArticleOrderReference例如與ID:1的PurchaseOrder有關係,可能只有相同的文章只有一次。所以我不能再次選擇同一篇文章。

在我FormBuilderType:

$builder->add('article', 'entity', array(
     'class' => 'AcmeAppBundle:Article', 
     'property' => 'name', 
    )); 
$builder->add('amount', 'integer'); 

我如何能實現呢?

的PurchaseOrder:

class PurchaseOrder{ 

/** @ORM\OneToMany(targetEntity="ArticleOrderReference", mappedBy="purchaseOrder") */ 
protected $purchaseOrders; 

ArticleOrderReference:

/** @ORM\ManyToOne(targetEntity="Article", inversedBy="articles") */ 
protected $article; 

/** @ORM\ManyToOne(targetEntity="PurchaseOrder", inversedBy="purchaseOrders") */ 
protected $purchaseOrder; 

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

文章:

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=255) 
*/ 
private $name; 

/** @ORM\OneToMany(targetEntity="ArticleOrderReference", mappedBy="article") */ 
protected $articles; 

控制器:

$articleOrder = new ArticleOrderReference(); 

    $form = $this->createForm(new ArticleOrderType(), $articleOrder); 

    // process the form on POST 
    if ($request->isMethod('POST')) { 
     $form->bind($request); 
     if ($form->isValid()) {    

      $purchaseOrder = $this->getDoctrine() 
      ->getRepository('AcmeAppBundle:PurchaseOrder') 
      ->find($id); 

      if (!$purchaseOrder) { 
       throw $this->createNotFoundException(
         'No order found for id '.$id 
       ); 
      }    

      $articleOrder->setPurchaseOrder($purchaseOrder); 

      $em = $this->getDoctrine()->getManager(); 

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


      return $this->redirect($this->generateUrl('order', array('id' => $id))); 

     } 
} 

回答

0

您可以使用UniqueEntity constraint通過表ArticleOrderReference確保一個Article僅鏈接到PurchaseOrder

你需要改變你的ArticleOrderReference實體如下:

namespace Acme\UserBundle\Entity; 
use Doctrine\ORM\Mapping as ORM; 

// DON'T forget this use statement!!! 
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; 

/** 
* @ORM\Entity 
* @UniqueEntity({"article", "purchaseOrder"}) 
*/ 
class ArticleOrderReference 
{ 
    /** @ORM\ManyToOne(targetEntity="Article", inversedBy="articles") */ 
    protected $article; 

    /** @ORM\ManyToOne(targetEntity="PurchaseOrder", inversedBy="purchaseOrders") */ 
    protected $purchaseOrder; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="amount", type="integer") 
    */ 
    private $amount; 
    // ... 
} 
+0

我加入了@UniqueEntity和我的實體使用聲明,但我仍然可以添加同一篇文章多次。 – ChrisS

+0

你可以編輯你的問題,並添加代碼,你可以多次添加同一篇文章? – cheesemacfly

+0

當然可以,我在第一篇文章中加入了我的控制器 – ChrisS

相關問題