【问题标题】:Symfony2 @UniqueEntity in custom Sonata Admin ClassSymfony2 @UniqueEntity 在自定义奏鸣曲管理类
【发布时间】:2016-04-17 19:57:58
【问题描述】:

这是我的实体示例代码。

EntityOne.php

//....
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
//....

/**
 * EntityOne
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="AppBundle\Entity\EntityOneRepository")
 * @UniqueEntity(
 *     fields={"entityTwo", "number"},
 *     errorPath="number",
 *     message="A entityTwo with this number already exists."
 * )
 */
class EntityOne
{

    //....

    /**
     * @ORM\ManyToOne(targetEntity="EntityTwo", inversedBy="entityOne")
     * @ORM\JoinColumn(name="entitytwo_id", referencedColumnName="id")
     */
    protected $entityTwo;

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

    //....

}

EntityTwo.php

/**
 * EntityTwo
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="AppBundle\Entity\EntityTwoRepository")
 */
class EntityTwo
{

    //....

    /**
     * 
     * @ORM\OneToMany(targetEntity="EntityOne", mappedBy="entityTwo", cascade={"persist"}, orphanRemoval=true)
     * @ORM\OrderBy({"number" = "ASC"})
     */
    protected $entityOne;

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

    //....

}

我正在将 SonataAdminBundle 与实体的 常规 管理类一起使用,一切正常。

@UniqueEntity 的问题出在另一个地方。 在不同的admin类中,创建EntityOne的记录号,数量取决于EntityOne中某个字段的值。

为此,我按如下方式进行:

EntityTwoAdmin.php

class EntityTwoAdmin extends Admin {

    //....

    protected $formOptions = array(
        'cascade_validation' => true        
    );

    //....

    public function preUpdate($entityTwo) {

        $numTotals = $entityTwo->getTotals();
        $numEntityOneExist = $entityTwo->getEntityOne()->count();

        for ($i = $numEntityOneExist; $i <= $numTotals; $i++) {

            $entityOneNew = new \AppBundle\Entity\EntityOne;

            $entityOneNew->setNumber($i);

            $entityTwo->addEntityOne($entityOneNew);
        }

    }
}

这里的记录是在不考虑约束验证的情况下创建的。

我不知道我可能缺少什么,但肯定有一些我需要修复。

有什么想法吗?

【问题讨论】:

    标签: php symfony doctrine-orm sonata-admin unique-constraint


    【解决方案1】:

    我设法修复了它,我不清楚这是最好的方法还是不遵循 symfony 的最佳实践。

    我在这里分享,为那些可以提供帮助的人:

    EntityTwoAdmin.php

    public function preUpdate($entityTwo) {
    
        $numTotals = $entityTwo->getTotals();
        $numEntityOneExist = $entityTwo->getEntityOne()->count();
    
        for ($i = $numEntityOneExist; $i <= $numTotals; $i++) {
    
            $entityOneNew = new \AppBundle\Entity\EntityOne;
            $entityOneNew->setNumber($i);
            $entityOneNew->setEntityTwo($entityTwo);
    
            $validator = $this->getConfigurationPool()->getContainer()->get('validator');
            $errors = $validator->validate($entityOneNew);
    
            if (count($errors) == 0) {
    
                $entityTwo->addEntityOne($entityOneNew);
    
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-03
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多