Symfony ManyToOne为select返回相同的值

时间:2018-04-20 10:17:15

标签: symfony symfony-forms

在symfony 4中,我CustomerTitle表:

Customer table:
id INT
name VARCHAR(32)
title_id TINYINT [FK]

Title table:
id INT
code VARCHAR(8)
name VARCHAR(24)

已创建供应商实体:

/**
 * Supplier
 *
 * @ORM\Table(name="supplier", indexes={@ORM\Index(name="title_id", columns={"title_id"})})
 * @ORM\Entity
 */
class Supplier
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="int", nullable=false, options={"unsigned"=true})
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

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

    /**
     * @var \Title
     *
     * @ORM\ManyToOne(targetEntity="Title")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="title_id", referencedColumnName="id")
     * })
     */
    private $title;


    public function getId(): ?int
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getTitle(): ?Title
    {
        return $this->title;
    }

    public function setTitle(?Title $title): self
    {
        $this->title = $title;

        return $this;
    }

    public function __toString()
    {
        return $this->name;
    }
}

还有Title实体:

/**
 * Title
 *
 * @ORM\Table(name="title")
 * @ORM\Entity
 */
class Title
{
    /**
     * @var bool
     *
     * @ORM\Column(name="id", type="boolean", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="code", type="string", length=8, nullable=false)
     */
    private $code;

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

    public function getId(): ?bool
    {
        return $this->id;
    }

    public function getCode(): ?string
    {
        return $this->code;
    }

    public function setCode(string $code): self
    {
        $this->code = $code;

        return $this;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function __toString()
    {
        return $this->name;
    }
}

这是我的供应商类型:

class SupplierType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
            ->add('title')
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Supplier::class,
        ]);
    }
}

我的创建表单默认使用console make:crud生成 - >供应商

问题是:我在创建供应商处的组合框具有相同的标题值:

<select id="supplier_title" name="supplier[title]" class="form-control">
    <option value=""></option>
    <option value="1" selected="selected">TOKO</option>
    <option value="1" selected="selected">TOKO</option>
    <option value="1" selected="selected">TOKO</option>
</select>

出了什么问题?

注意

  • 我的另一个表格SupplierBankManyToOneSupplier的关系。组合框数据正常。

1 个答案:

答案 0 :(得分:0)

我解决了这个难题!对于遇到类似问题的每个人,我都会留下答案。

对于我的情况,我从现有数据库生成实体。我的一些表使用数据类型 tinyint 。使用symfony的拇指规则之一:不要使用TINYINT作为PRIMARY KEY !它将转换为布尔值。因此,当我使用tinyint从表生成实体时,它转换为boolean。当我将所有布尔值重命名为smallint和/或int时,它就解决了!

遗憾的symfony没有tinyint数据类型。虽然,他们有自己的考虑。