小编TiP*_*iPi的帖子

Symfony2无效的动态表单没有错误

我在symfony2上遇到了动态表单的问题.我正在尝试为提交的表单生成一些字段.换句话说,用户输入一些值,提交表单,并根据这些值,我的动态字段被添加到同一个表单(显然,第二次显示).为此,我在烹饪书中使用了这个例子:http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#cookbook-form-events-submitted-data

所以,这是我的FormationType类

class FormationType extends AbstractType
{

private $em;
private $context;

public function __construct($em, $context) {
    $this->em = $em;
    $this->context = $context;
}

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name')
        ->add('date')
        ->add('type', 'choice', array(
            'mapped' => false,
            'choices' => Formationlist::getTypeTypes(false),
            'empty_value' => false,
        ))
        ->add('cost')
        ->add('travelCost')
        ->add('maximum')
        ->add('location')
        ->add('schedule')
    ;

    $formModifier = function(FormInterface $form, $type) {
        $formationList = $this->em->getRepository('CoreBundle:FormationList')->findBy(array("year" => 1, "type" => $type));

        $form->add('formationList', 'entity', array(
            'label'=> 'Titre formation', 
            'choices' => $formationList, 
            'class' => …
Run Code Online (Sandbox Code Playgroud)

php forms dynamic symfony

5
推荐指数
1
解决办法
4845
查看次数

多对一,使用继承映射进行自引用

我有一些共同的关系和属性.所以,我想使用继承映射来简化我的模式.

我创建了一个BaseData mappedsuperclass,并让我的其他实体扩展它.此BaseData类具有每个实体所需的公共关系.

它适用于多对一关系,例如

/**
 * @ORM\MappedSuperclass
 */
class BaseData
{

    /**
    * @ORM\ManyToOne(targetEntity="Service")
    * @ORM\JoinColumn(name="service_id", referencedColumnName="id")
    */  
    protected $service;
Run Code Online (Sandbox Code Playgroud)

但是自我引用变得有点棘手.

例如,因为我想创建一个父引用,我尝试了:

/**
 * @ORM\MappedSuperclass
 */
class BaseData
{

    /**
    * @ORM\ManyToOne(targetEntity="BaseData")
    * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
    */
    protected $parent;
Run Code Online (Sandbox Code Playgroud)

显然,当我尝试查询此实体时,它会导致TableNotFoundException : QLSTATE[42S02]: Base table or view not found: 1146 Table 'project.base_data' doesn't exist.

所以,我尝试了AssociationOverrides,但似乎不允许更改目标实体.

那么,有没有办法在MappedSuperclass上构建一些自引用?顺便说一句,它甚至有意义吗?

提前谢谢了 !

更新

这是anwser:

我按计划在我的BaseData mappedSuperClass中定义了protected $parentprotected $children.我用他需要的其他信息注释了它们.例如:

/**
 * @ORM\MappedSuperclass
 */
class BaseData
{

    /**
    * @Datagrid\Column(field="parent.id", title="datagrid.parent_id", visible=false, …
Run Code Online (Sandbox Code Playgroud)

orm inheritance doctrine self-reference symfony

5
推荐指数
1
解决办法
1358
查看次数

Doctrine 通过 join 批量更新 DQL

我需要用几组值更新大量实体(~100k)。为此,我想使用DQL 更新查询

问题来自我的查询的 where 子句。我需要过滤要更新的实体。

$qb->update('MyBundle/Entity/MyEntity', 'e')
->set('e.fieldToUpdate', ':value')
->innerJoin('e.relation', 'r')
->where('r.filter < :filter')
->setParameters...
Run Code Online (Sandbox Code Playgroud)

不幸的是,更新和删除查询不支持连接。而且我将无法使用 where 子句,e.id IN "subquery"因为 MySQL 文档说:

在 MySQL 中,您不能修改表并在子查询中从同一个表中进行选择。

出于性能原因,我想避免使用Query#iterate()基于循环的设施或其他解决方案,所以......我不知道如何处理这个问题。

这听起来像是一个常见问题,我可能会错过一些非常明显的东西......所以如果有解决方法可以做到这一点,我会很高兴阅读它!

php mysql symfony doctrine-orm

1
推荐指数
1
解决办法
7446
查看次数