php - mysql 数据库的 Symfony2 Doctrine 约束外键问题

标签 php mysql sql symfony doctrine-orm

我正在尝试在 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 代码。 你认为发生了什么?这是一个错误还是我犯了一个错误?我已经看到了一些这样的线程,但是我所看到的所有内容都不适合我。任何帮助将不胜感激。 问候

最佳答案

两个小问题

在作业类中

/**
* @ORM\ManyToOne(targetEntity="Vehicle", inversedBy="jobs")
* @ORM\JoinColumn(name="id_vehicle", referencedColumnName="id_vehicle")
*/
protected $vehicles; //changed the name to different one just for no conflict

在车辆类

/**
* @ORM\OneToMany(targetEntity="Job", mappedBy="vehicles")
*/
protected $jobs;

referencedColumnName应该是相关字段的列名,而不是FieldName;所以它应该是 id_vehicle
第二个是在 mappedBy 中,它应该设置为 vehicles

的属性名称

以防万一,通过 phpMyAdmin 或任何其他工具检查您的表结构,并检查是否创建了具有外键的字段尝试删除该字段和外键,然后应用这些更改并运行更新命令

关于php - mysql 数据库的 Symfony2 Doctrine 约束外键问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23085236/

相关文章:

php - laravel 侦察兵 : How to update index in controller

php - 复杂的mysql表设计选择

mysql - Postgres 相当于基于顺序的 MySQL 更新

mysql查询遵循模式的每个下一个元素

mysql - 由于列名错误,SQL 查询无法工作,但列存在

sql - SQL中的反向工程和正向工程有什么区别

php - 获取通过 mysql 搜索创建的数组中元素的位置 - PHP

php - CodeIgniter 配置文件中的自定义验证错误消息

mysql - Sqoop Import --password-file 函数在 sqoop 1.4.4 中无法正常工作

python - SQLAlchemy 查询返回 None