【发布时间】:2014-04-15 13:31:06
【问题描述】:
我正在尝试在 Vehicle 和 job 之间创建一对多的关系,如下所示:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="job")
*/
class Job
{
/**
* @ORM\Column(type="integer", name="id_vehicle")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $idJob;
/**
* @ORM\Column(type="string", length=20, name="delivery_number")
*/
protected $deliveryNo;
/**
* @ORM\Column(type="datetime", name="date_time")
*/
protected $dateTime;
/**
* @ORM\Column(type="string", length=200, name="destination")
*/
protected $destination;
/**
* @ORM\Column(type="integer", name="km_odo_start", nullable=true)
*/
protected $kmOdoStart;
/**
* @ORM\Column(type="integer", name="km_odo_end", nullable=true)
*/
protected $kmOdoEnd;
/**
* @ORM\Column(type="string", length=50, name="deliveryType", nullable=true)
*/
protected $deliveryType;
/**
* @ORM\Column(type="integer", name="fuel_used", nullable=true)
*/
protected $fuelUsedLitre;
/**
* @ORM\Column(type="string", length=100, name="driver_name", nullable=true)
*/
protected $driverName;
/**
* @ORM\Column(type="string", length=250, name="crew_names", nullable=true)
*/
protected $crewNames;
/**
* @ORM\Column(type="string", length=7, name="triler_plate_number", nullable=true)
*/
protected $trilerPlateNumber;
/**
* @ORM\Column(type="string", length=500, name="remarks")
*/
protected $remarks;
/**
* @ORM\Column(type="string", length=500, name="return_load_plan")
*/
protected $returnLoadPlan;
/**
* @ORM\ManyToOne(targetEntity="Vehicle", inversedBy="job")
* @ORM\JoinColumn(name="id_vehicle", referencedColumnName="idVehicle")
*/
protected $idVehicle;
}
还有车辆:
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\Table(name="vehicle")
*/
class Vehicle
{
/**
* @ORM\Column(type="integer", name="id_vehicle")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $idVehicle;
/**
* @ORM\Column(type="string", length=7, name="plate_number")
*/
protected $plateNumber;
/**
* @ORM\Column(type="integer", name="distance_to_service")
*/
protected $DistanceToServiceKm;
/**
* @ORM\Column(type="integer", name="last_service_odo")
*/
protected $lastServiceODOKm;
/**
* @ORM\Column(type="string", length=100, name="make")
*/
protected $makeName;
/**
* @ORM\Column(type="string", length=100, name="model")
*/
protected $modelName;
/**
* @ORM\OneToMany(targetEntity="Job", mappedBy="vehicle")
*/
protected $jobs;
public function __construct()
{
$this->jobs = new ArrayCollection();
}
当我尝试运行时:
PS D:\web\wamp\www\team> php app/console doctrine:schema:update --force
Updating database schema...
[Doctrine\DBAL\DBALException]
An exception occurred while executing 'ALTER TABLE job ADD CONSTRAINT FK_FBD8E0F8C51D4DF6 FOREIGN KEY (id_vehicle)
REFERENCES vehicle (idVehicle)':
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
doctrine:schema:update [--complete] [--dump-sql] [--force] [--em[="..."]]
PS D:\web\wamp\www\team>
然后--dump-sql 生成良好的 MySQL 代码。
你认为正在发生什么?我这是一个错误还是我犯了一个错误?我见过一些这样的线程,但我所见过的东西都不适合我。任何帮助将不胜感激。
问候
【问题讨论】:
-
如果你运行
php app/console doctrine:schema:validate它会显示什么?
标签: php mysql sql symfony doctrine-orm