2015-11-14 1 views
0

J'essaie de créer une association bidirectionnelle "OneToMany" dans mon projet mais lorsque j'exécute "doctrine: schéma: mise à jour", rien ne se passe.Impossible de créer une association sur Symfony2

Si je crée cette association directement à partir Sequel Pro et exécutez la commande de schéma de mise à jour, qui change Dissapear ...:/

Les relations est: - Un "id" de clients Table avec de nombreux "customer_id" formulaire Table de contrôle.

Voici le code clients:

<?php 

namespace Ourentec\CustomersBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 

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

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

/** 
* @var string 
* 
* @ORM\Column(name="lastname", type="string", length=100) 
*/ 
private $lastname; 

/** 
* @var string 
* 
* @ORM\Column(name="address", type="text") 
*/ 
private $address; 

/** 
* @var string 
* 
* @ORM\Column(name="phone", type="string", length=100) 
*/ 
private $phone; 

/** 
* @var string 
* 
* @ORM\Column(name="pass", type="string", length=100) 
*/ 
private $pass; 

/** 
* @var string 
* 
* @ORM\Column(name="tasks", type="text") 
*/ 
private $tasks; 

/** 
* @var string 
* 
* @ORM\Column(name="status", type="string", length=100) 
*/ 
private $status; 

/** 
* @var string 
* 
* @ORM\Column(name="email", type="string", length=100) 
*/ 
private $email; 

/** 
* @var \DateTime 
* 
* @ORM\Column(name="date", type="datetime") 
*/ 
private $date; 

/** 
* @var string 
* 
* @ORM\Column(name="location", type="string", length=100) 
*/ 
private $location; 



/** 
* @ORM\OneToMany(targetEntity="Control", mappedBy="customers") 
*/ 
private $customer_id; 

public function __construct() 
{ 
    $this->customer_id = new ArrayCollection(); 
} 

Et le code de commande:

<?php 

namespace Ourentec\CustomersBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

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

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="customer_id", type="integer") 
    * 
    * @ORM\ManyToOne(targetEntity="Customers", inversedBy="control") 
    * @ORM\JoinColumn(name="customer_id", referencedColumnName="id") 
    */ 
    private $customerId; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="user_id", type="integer") 
    */ 
    private $userId; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="date", type="datetime") 
    */ 
    private $date; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="seen", type="smallint") 
    */ 
    private $seen; 

J'ai suivi la documentation de ce 2 sites http://symfony.com/doc/current/book/doctrine.html http://librosweb.es/libro/symfony_2_x/capitulo_8/relaciones_y_asociaciones_de_entidades.html

Mais je ne Sachez pourquoi cela ne fonctionne pas ..

Toute idée sera appréciée :)

Répondre

3

La cartographie n'est pas correcte, je vais essayer d'expliquer comment cela fonctionne.

Dans entité Clients (vous devez le renommer au Client, Entites noms sont singuliers)

/** 
* @ORM\OneToMany(targetEntity="Control", mappedBy="customer") 
*/ 
private $controls; 

mappée par l'option définit le nom du champ dans l'autre entité.

/** 
* @var integer 
* 
* @ORM\Column(name="customer_id", type="integer") 
* 
* @ORM\ManyToOne(targetEntity="Customers", inversedBy="controls") 
* @ORM\JoinColumn(name="customer_id", referencedColumnName="id") 
*/ 
private $customer; 

Même chose avec inversedBy.

Dans entité Clients vous devez également les commandes init de var comme ArrayCollection:

public function __construct() 
{ 
    $this->controls = new ArrayCollection(); 
} 

Avec ces schémas mappings doit être mis à jour correctement. Pour plus d'informations, consultez doctrine docs.

+0

Chapeau de Mateusz !!! Ca a marché :) –

+0

Je suis content d'entendre ça :) –