1

我有一个包含以下实体的 Symfony 项目:PurchaseOrder、Article、Supplier。一个订单可以有多个商品,一个订单可以有多个供应商。您可以通过 ArticleOrderReference(实体)设置每篇文章的数量。

我构建了一个表单,我可以在其中将文章添加到带有金额的订单中(ArticleOrderReference 中的条目)。此外,我还有另一种形式,我可以在其中将供应商添加到订单中。

但现在我的问题是,我想创建一个表单,其中我有一个金额输入字段(对于 ArticleOrderReference 中与此订单相关的每个文章),它应该出现在与订单相关的每个供应商。例如:

Order 1:

Article1     [amount InputField for Supplier1] [amount InputField for Supplier2] ...  
Article2     [amount InputField for Supplier1] [amount InputField for Supplier2] ...

因此,我构建了另一个名为 ArticleOrderSupplierReference 的实体,其中包括 supplier_id 、 ArticleOrderReference_id 和 amount 。

我不知道,如何实现这一点。有些人告诉我使用嵌入式集合,但我不知道如何在这种情况下使用它们。有任何想法吗?

文章顺序参考:

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

文章:

class Article
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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

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

    public function __construct() {
        $this->articles = new ArrayCollection();
    }...

命令:

class PurchaseOrder
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date", type="datetime")
     */
    private $date;

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

    /**
     * @ORM\ManyToMany(targetEntity="Supplier", inversedBy="purcaseOrders")
     * @ORM\JoinTable(name="purchaseOrders_suppliers")
     */
    private $suppliers;

    public function __construct()
    {
        $this->purchaseOrders = new ArrayCollection();
        $this->suppliers = new ArrayCollection();
    }...

供应商:

class Supplier
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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


    /**
     * @ORM\ManyToMany(targetEntity="purchaseOrder", mappedBy="suppliers")
     */
    private $purchaseOrders;

    public function __construct() {
        $this->purchaseOrders = new ArrayCollection();
    }

文章订购供应商参考:

 class AOSupplierReference
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
         */
    private $id;

/** @ORM\ManyToOne(targetEntity="ArticleOrderReference", inversedBy="articleOrderReferences") */
protected $articleOrderReference;

/** @ORM\ManyToOne(targetEntity="Supplier", inversedBy="suppliers") */
protected $supplier;

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

1 回答 1

0

我用双嵌入式集合解决了这个问题。

首先,我构建了三个 FormType:

第一个我收集所有相关的 ArticleOrderReferences:在我的控制器中,我称之为: $form = $this->createForm(new AmountOrderType(), $order); 并将其返回到我的树枝文件中。

$builder->add('purchaseOrders', 'collection', array('type' => new AmountOrderArticleType()));

第二个我收集所有相关的 ArticleOrderSupplierReferences:

$builder->add('articleOrderReferences', 'collection', array('type' => new AmountOrderSubArticleType()));

第三个我设置了金额:

$builder->add('amount');

树枝文件:

{% for purchaseOrder in form.purchaseOrders %}
                        <span class="articleOrderReferences">
                            {% for articleOrderReference in purchaseOrder.articleOrderReferences %}
                                {{ form_errors(articleOrderReference.amount) }}
                                {{ form_widget(articleOrderReference.amount, { 'attr': {'class': 'input-mini'} }) }}
                            {% endfor %}<br>
                        </span>

{% endfor %}
于 2013-06-02T15:19:34.500 回答