我的用户类的这部分
<?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;
}
答案 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:User
和php app/console doctrine:schema:update --force
。
将表单字段更改为:
->add('flightNumber', 'text', array(
'label' => 'form.labels.flightNumber',
'translation_domain' => 'User'
))
通过这种方式,您的flightNumber只是您的User表中的一列,允许字符串(所有字母数字字符)。