【问题标题】:Symfony Entities in a collection集合中的 Symfony 实体
【发布时间】:2015-05-21 07:03:19
【问题描述】:

我找不到任何类似的问题,所以这里是:

我的(订单)流实体和产品实体之间存在多对多关系,但它没有在<select> 中选择<option>

所有实体都由 Symfony 自己设置,所以 @ORM\ManyToMany 等应该没问题。

我的controller 有以下行:

$form = $this->createForm(new \FDM\BestilBundle\Type\FlowsType(), $flow)->add('submit', 'submit');

$flow 已从数据库正确填充。

FlowsType 文件有很多字段,代码如下:

->add('product', 'collection', [
  'type' => new ProductDropdownType(),
  'allow_add' => TRUE,
  'allow_delete' => TRUE,
  'prototype' => TRUE,
  'by_reference' => FALSE,
  ]
)

FlowsType 中的所有字段均已正确填写,但以下字段除外。

ProductDropdownType 的代码如下:

$builder->add('name', 'entity', [
  'class' => 'FDMBestilBundle:Flows',
  'property' => 'name',
  'by_reference' => false
]);

行数是正确的 - 如果我的多对多 sql 表中有三行,它会显示三行。他们只是没有被选中。 如果我将ProductDropdownType 更改为:

$builder->add('name', 'text');

数据显示得很好 - 所以 db 和everyting 都在工作。除非我想要收集 <select>...

实体中的关系如下:

在流实体中:

/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\ManyToMany(targetEntity="FDM\BestilBundle\Entity\Product", inversedBy="flow")
 * @ORM\JoinTable(name="productsinflows",
 *   joinColumns={
 *     @ORM\JoinColumn(name="flow", referencedColumnName="flowId")
 *   },
 *   inverseJoinColumns={
 *     @ORM\JoinColumn(name="product", referencedColumnName="productId")
 *   }
 * )
 */
private $product;

在产品实体中:

/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\ManyToMany(targetEntity="FDM\BestilBundle\Entity\Flows", mappedBy="product")
 */
private $flow;

有人可以帮帮我吗 - 我卡住了!

【问题讨论】:

  • 您的意思是您的选择填充了 3 个选项,其中的值为空?我没有得到“他们只是没有被选中”
  • 我的意思是选择标签正确地填充了“产品”数据。但未选择选择标签。没有选项标签具有“选定”属性。我的一个流程在多对多表中有三个产品。该页面正确显示三个select。所有三个select 都有产品表中的所有产品。但是这三个都没有 selected 属性。
  • 你能用关系更新你的答案吗?
  • @NawfalSerrar - 完成。
  • 对我来说看起来是正确的,如果考虑到关系,我不确定集合,我确定如果实体在您的主要类型中没有集合,则应该选择它,但因为它是一个集合和另一种可能不支持的表单类型

标签: php symfony collections entity


【解决方案1】:

您可以在表单中使用查询生成器,这是一个示例: 在查询生成器中,使用 DQL 创建 SQL 查询

->add('espece', 'entity', array(
    'class'    => 'ADMapecheBundle:Espece',
    'property' => 'nom',
    'multiple' => false,
    'query_builder' => function(EspeceRepository $er) use ($user) {
                        return $er->createQueryBuilder('p')
                            ->where("p.user = :user")
                            ->orderBy('p.nom', 'ASC')
                            ->setParameter('user', $user);

希望能帮到你,友好的

【讨论】:

  • 您好队长。您的 EspeceRepository 文件是什么样的?你从哪里得到 $user 对象/变量?
  • 我相信这只是他的一段代码不适合你的代码,但这不是你要找的,你已经有了你的数据,如果你需要特殊查询,可以使用 query_builder对于实体,但他想要我猜的一切
  • 用户对象是我的查询的关闭位置,我的 EspeceRepository 被调用来设置查询结果的类型,它是空的。
猜你喜欢
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
相关资源
最近更新 更多