Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony FormType实体:已使用_Symfony - Fatal编程技术网

Symfony FormType实体:已使用

Symfony FormType实体:已使用,symfony,Symfony,我有三个实体:PurchaseOrder、Article和ArticleOrderReference。我需要ArticleOrderReference实体为每个OrderToArticle关系提供一个整数值 因此,purchaseOrder可以有许多ArticleOrderReference。一篇文章也可以有很多ArticleOrderReferences 我的问题是,每个ArticleOrderReference(例如,它与ID为1的PurchaseOrder有关系)只能有一次相同的文章。所以

我有三个实体:PurchaseOrder、Article和ArticleOrderReference。我需要ArticleOrderReference实体为每个OrderToArticle关系提供一个整数值

因此,purchaseOrder可以有许多ArticleOrderReference。一篇文章也可以有很多ArticleOrderReferences

我的问题是,每个ArticleOrderReference(例如,它与ID为1的PurchaseOrder有关系)只能有一次相同的文章。所以我不能再次选择同一篇文章

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

        }
 }
您可以使用以确保一篇
文章通过表
articleordreference
仅链接到
PurchaseOrder

您需要更改
articleordreference
实体,如下所示:

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;
    // ...
}

我在我的实体中添加了@uniquentity和use语句,但我仍然可以多次添加同一篇文章。您是否可以编辑您的问题并添加代码,使您能够多次添加同一篇文章?您是否仅在一次post操作中有两次相同的关系?如果是,当您调用
$form->isValid()
时,它将返回
true
,因为它在数据库中不存在。你能试着先发布关系,然后在第二个动作中再做一次吗?(希望这是清楚的:))你的意思是在post的流程表单中获取$form->getData(),并在刷新新订单之前检查是否已经存在ArticleOrderReference?我的意思是,假设你的订单名为
fizz
,你添加了一篇名为
buzz
:它工作正常。然后在同一页上,将同一对象添加到同一顺序
fizz
buzz
。这行吗?(因为它不应该)