从symfony2中的collectionType开始订购

时间:2011-10-21 09:37:34

标签: symfony

我是symfony2的新手,我只想弄清楚框架是如何运作的。 我有以下关系:

1 palette(Palette entity) contains exactly 256 plumes(LogicalPlume entity) 
( which refers to a color(PhysicalPlume entity) ).
PS: the ID of the row in db is set as auto-increment, 
but the index of logicalPlume and physicalPlume is set manually (0->255).

我将我的实体中的关系设置为oneToMany和ManyToOne。 我将PaletteType创建为CollectionType

$builder->add('logicalPlumes', 'collection', array(
  'type' => new LogicalPlumeType($profile_id),
  'label' => 'plumes'
));

LogicalPlumeType

$profile_id = $this->profile_id;

$builder->add('physicalPlume', 'entity', array(
  'class' => 'DessinPlumeBundle:PhysicalPlume',
  'query_builder' => function(EntityRepository $er)  use ($profile_id) {
     return $er->createQueryBuilder('pp')
                            ->where("pp.profile = :profile")
                          ->orderBy('pp.index', 'ASC')
                     ->setParameter('profile', $profile_id);
   }
));

Eveything很棒,调色板对象在数据库中正确保存(除了对象没有保存在正确的索引中)。

Firebug告诉我标签'0'旁边的选择ID为“palette_0”。 但我认为这实际上指的是数据库中的另一个索引,不是吗?!

因此,当我读取对象时,我想要INDEX返回的羽流,以便我可以正确显示它们。

例如:

I saved 
logicalPlume1 = 10;
logicalPlume2 = 0;   with '0' being the default value.
logicalPlume3 = 9;
logicalPlume4 = 0;
logicalPlume5 = 5;

when i read it back, it shows:
logicalPlume1 = 10;
logicalPlume2 = 5;
logicalPlume3 = 9;
logicalPlume4 = 0;
logicalPlume5 = 0;
pushing all the '0' values to the bottom

我想我应该在这里使用CollectionType,但我有一个要保留的命令。 我该怎么做?

我是否需要使用其他类型?

谢谢。

1 个答案:

答案 0 :(得分:0)

如果没有看到您的控制器代码,我会说您的级联持久性的处理顺序与您为表单选择的非默认值的处理顺序不同。

尝试通过foreach或map保持每个羽流,看看指数是什么。

如果您仍需要帮助,请发布控制器代码。