2014-06-13 3 views
0

J'ai des problèmes avec les clés étrangères en doctrine. J'ai une table "User" et une table "Orders". Maintenant, je veux avoir une clé étrangère de userID dans la table des commandes à l'id dans la table des utilisateurs. Les commandes entité ressemble:Doctrine create foreign key

<?php 

namespace Application\TestBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table(
* name="Orders", 
* options={"collate"="utf8_general_ci", 
* "charset"="utf8", 
* "engine"="InnoDB" 
* } 
*) 
* @ORM\Entity(repositoryClass="Application\TestBundle\Entity\OrdersRepository") 
*/ 
class Orders 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(
    * name="id", 
    * unique=true, 
    * type="integer", 
    * options={"unsigned"=true} 
    *) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(
    * name="userID", 
    * type="integer", 
    * nullable=false, 
    * options={"unsigned"=true} 
    *) 
    * @ORM\OneToOne(targetEntity="User") 
    * @ORM\JoinColumn(name="userID", referencedColumnName="id") 
    */ 
    private $userID; 

    // ... 
} 

L'entité utilisateur ressemble à:

<?php 

namespace Application\TestBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table(
* name="User", 
* options={"collate"="utf8_general_ci", 
* "charset"="utf8", 
* "engine"="InnoDB" 
* } 
*) 
* @ORM\Entity(repositoryClass="Application\TestBundle\Entity\UserRepository") 
*/ 
class User 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(
    * name="id", 
    * unique=true, 
    * type="integer", 
    * options={"unsigned"=true} 
    *) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    // ... 
} 

Malheureusement aucune clé étrangère sera mis. Ce n'est pas dans la requête SQL. Qu'est-ce que je fais mal?

+0

Comment persistez-vous votre entité? Pouvez-vous coller la partie * pertinente * de votre action de contrôleur? –

+0

voir ma question mise à jour – user3631654

Répondre

2

La solution est simple. Il ne peut s'agir que d'une relation ou d'un type de données (chaîne, objet, entier). Donc, mon exemple nécessite une relation, donc j'ai dû supprimer le @ORM\Column -annoation et cela a fonctionné!

0

Cela se produit généralement si le type de votre moteur de table de base de données ne prend pas en charge les clés étrangères (telles que MyISAM). Essayez de changer votre type de moteur par exemple à InnoDB, puis exécutez

console doctrine:schema:update 
+0

malheureusement, c'est déjà InnoDB – user3631654

+0

Comment puis-je voir ce qui ne va pas? – user3631654

Questions connexes