0

PurchaseOrder 、 Article 、 ArticleOrderReference の 3 つのエンティティがあります。すべての Order to Article Relation に整数値の量を与えるために ArticleOrderReference エンティティが必要です。

したがって、 purchaseOrder は多くの ArticleOrderReferences を持つことができます。また、Article には多くの ArticleOrderReferences を含めることもできます。

私の問題は、たとえば ID: 1 の PurchaseOrder と関係があるすべての ArticleOrderReference は、同じ記事を一度だけ持つことができるということです。二度と同じ記事を選べないように。

私の FormBuilderType で:

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

どうすればそれを理解できますか?

注文書:

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)));

        }
 }
4

1 に答える 1

0

UniqueEntity 制約を使用して、1 つがテーブルを介してArticle1 回だけリンクされるようにすることができます。PurchaseOrderArticleOrderReference

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;
    // ...
}
于 2013-06-02T17:13:01.550 に答える