如何更改实体的类型

时间:2016-02-02 18:13:24

标签: php symfony

我的用户类的这部分

<?php

 class User {

  /**
  * @var integer
  *
  * @ORM\Column(name="id", type="integer")
  * @ORM\Id
  * @ORM\GeneratedValue(strategy="AUTO")
  */
 private $id;

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

/**
* @var string
* @ORM\Column(type="string", nullable=false)
*/
private $lasttName;
  /**
  * @ORM\ManyToOne(targetEntity="\Test\TravelBundle\Entity\Flight",     inversedBy="flight")
  * @ORM\JoinColumn(name="flight", referencedColumnName="flightnumber",        nullable=true)
  * @var \Test\TravelBundle\Entity\Flight
  **/
   private $flight;

.......
/**
 * Set flight
 *
 * @param \Test\TravelBundle\Entity\Flight $flight
 * @return User
 */
public function setFlight(\Test\TravelBundle\Entity\Flight $flight = null)
{
    $this->flight = $flight;
    return $this;
}
/**
 * Get flight
 *
 * @return \Test\TravelBundle\Entity\Flight
 */
public function getId()
{
    return $this->flight;
}

}

这是我正在建立一个formbuild的部分

 public function newUser()
{


            // ID
            ->add('id', 'text', array(
                'label' => 'form.labels.id',
                'translation_domain' => 'User'))

            // Firstname
            ->add('firstname', 'text', array(
                'label' => 'form.labels.firstname',
                'translation_domain' => 'User'))

          // lastName
            ->add('lastname', 'text', array(
                'label' => 'form.labels.lastname',
                'translation_domain' => 'User'))

            // Flight number
            ->add('flightNumber', 'integer', array(
                'label' => 'form.labels.flightNumber',
                'translation_domain' => 'User'))


                ))
            // Submit button
            ->add('save', 'submit', array(
                'label' => 'form.buttons.submitUser',
                'translation_domain' => 'submit'))

我想添加一个新用户,但数据库中的航班号有varchar,所以如果我使用inter,它只是接受号码。航班类型应为varchar

和航班部分

class Flight {

/**
 * @ORM\Id
 * @ORM\Column(type="string", length=8, name="flightnumber")
 */
protected $id;

/**
 *
 * @var string @ORM\Column(type="string", length=32)
 */
protected $name;

/**
 * Set id
 *
 * @param integer $id           
 * @return Flight
 */
public function setId($id) {
    $this->id = $id;

    return $this;
}

/**
 * Get id
 *
 * @return integer
 */
public function getId() {
    return $this->id;
}

1 个答案:

答案 0 :(得分:0)

我认为你的逻辑错了。

您有两个实体,即Flight和User 这两个实体代表MySQL (不仅仅是用户表中的一列)。

您当前的实施使用户可以关联一个或多个航班 因为它表示一个表,所以Flight实体不能是整数或varchar,它应该有一个标识符和代表你的MySQL表的其他属性。
标识符通常是具有自动增量的整数,就像在用户实体中已经完成的那样。

修改

最后一次尝试。在您的用户实体中,更改以下内容:

/**
 * @ORM\JoinColumn(name="flightnumber", type="string", nullable=true)
 * @var string
 */
private $flightNumber;

别忘了php app/console doctrine:generate:entities YourBundle:Userphp app/console doctrine:schema:update --force

将表单字段更改为:

->add('flightNumber', 'text', array(
    'label' => 'form.labels.flightNumber',
    'translation_domain' => 'User'
))

通过这种方式,您的flightNumber只是您的User表中的一列,允许字符串(所有字母数字字符)。