2016-12-31 4 views
1

Ich muss Anwendung von zf1 nach sf2 umschreiben. Aber ich muss alte Datenbankschema beibehalten. Und ich habe Probleme mit vielen zu vielen Beziehungen.Viele zu viele Beziehung mit alten Datenbank halten

Es gibt 2 Entitäten: Ausnahmen, Regionen und es war auch ExceptionRegions, aber ich habe es gelöscht. Es gibt 3 Tabellen in der Datenbank - Ausnahmen, Regionen und Ausnahmebereiche, die Hash-Tabelle ist. Unten Ich lege Bildschirm mit Beziehungen:

screen with relations

Mein Code: 1. Ausnahme Einheit:

<?php 

namespace AppBundle\Entity; 

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

/** 
* Exceptions 
* 
* @ORM\Table(name="Exceptions") 
* @ORM\Entity 
*/ 
class Exceptions 
{ 

/** 
* @var integer 
* 
* @ORM\Column(name="ExceptionID", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $exceptionid; 

/** 
* Many exceptions have many regions. 
* @ORM\ManyToMany(targetEntity="Regions", inversedBy="exceptions") 
* @ORM\JoinTable(name="exceptionregions"), 
*  joinColumns={@ORM\JoinColumn(name="ExceptionID", referencedColumnName="ExceptionID")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="RegionID", referencedColumnName="RegionID")} 
*) 
*/ 
private $regions; 

public function __construct() 
{ 
    $this->regions = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

/** 
* Add region 
* 
* @param AppBundle\Entity\Regions $region 
*/ 
public function addRegion(\AppBundle\Entity\Regions $regions) 
{ 
    $this->regions[] = $regions; 
} 

/** 
* Get regions 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function getRegions() 
{ 
    return $this->regions; 
} 

... 

} 
  1. Region Einheit:

    <?php 
    
    namespace AppBundle\Entity; 
    
    use Doctrine\ORM\Mapping as ORM; 
    
    /** 
    * Regions 
    * 
    * @ORM\Table(name="Regions") 
    * @ORM\Entity 
    */ 
    class Regions 
    { 
    
    /** 
    * @var string 
    * 
    * @ORM\Column(name="RegionName", type="string", length=45, nullable=false) 
    */ 
    private $regionname; 
    
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="RegionID", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $regionid; 
    
    /** 
    * @ORM\ManyToMany(targetEntity="Exceptions", mappedBy="regions") 
    */ 
    private $exceptions; 
    
    ... 
    } 
    

Und ich habe diesen Fehler:

The column id must be mapped to a field in class AppBundle\Entity\Exceptions since it is referenced by a join column of another class. 

von Ausnahmen natürlich Einheit ist mit wenigen Einheiten verbunden, nicht nur Regionen. Ich bin mit diesem Problem stecken geblieben, ich kann dieses Problem nicht lösen und mein Projekt fortsetzen. Hat jemand eine Idee, wie man diesen oder irgendeinen Ratschlag repariert? Was mache ich falsch? Ich wäre dankbar für jeden Kommentar.

+0

Ich sehe die Spalten-ID nicht irgendwo in Ihrem Code definiert. Entweder haben Sie uns den Code nicht gezeigt, oder Sie haben den Cache nicht gelöscht. Verwenden Sie: 'php bin/console cache: clear --env = prod ', um den Produktionscache zu löschen. –

+0

@Alvin Bunk Danke für den Kommentar. Cache wird gelöscht. Die IDs in diesen Tabellen heißen RegionID und ExceptionID (in den Entitätseigenschaften: regionid und exceptionid). Ich weiß, wahrscheinlich ist das Problem mit dem Namen der ID, aber ich kann sie nicht ändern. Was tun, damit es mit diesen Namen funktioniert? – r3m4k3

Antwort

0

Ich habe eine Lösung für dieses Problem gefunden. Vielleicht wird auch jemand davon profitieren.

So ist der Arbeitscode:

/** 
* Many exceptions have many regions. 
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Regions", inversedBy="exceptions") 
* @ORM\JoinTable(name="exceptionregions", 
* joinColumns={ 
*  @ORM\JoinColumn(name="ExceptionID", referencedColumnName="ExceptionID") 
* }, 
* inverseJoinColumns={ 
*  @ORM\JoinColumn(name="RegionID", referencedColumnName="RegionID") 
* }) 
*/ 
private $regions; 

@Alvin, vielen Dank für Ihr Engagement.

0

Haben Sie die Beziehung bidirektionale wie so zu machen versucht:

class Exceptions{ 
... 
    /** 
    * Many exceptions have many regions. 
    * @ORM\ManyToMany(targetEntity="Regions", inversedBy="exceptions") 
    * @ORM\JoinTable(name="regions_exceptions") 
    */ 
    private $regions; 

class Regions{ 
... 
    /** 
    * @ORM\ManyToMany(targetEntity="Exceptions", mappedBy="regions") 
    */ 
    private $exceptions; 

Nicht sicher, ob das funktionieren wird, aber können Sie es versuchen.

Dokumentation hier: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-bidirectional

** EDIT # 2 ** Können Sie diese Änderung versuchen:

class Exceptions 
{ 

    /** 
    * @var integer 
    * 
    * @ORM\Id 
    * @ORM\Column(name="ExceptionID", type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $exceptionid; 

Auch wenn das nicht, versuchen Sie funktioniert:

php bin/console doctrine:schema:update --force 
+0

Ja, ich habe versucht bidirektionale und unidirektionale Beziehung. Die beiden geben mir das gleiche Ergebnis, den Fehler, den ich oben erwähnt habe. Meiner Meinung nach ist das Problem der Name der ID. – r3m4k3

+0

Ich habe eine Bearbeitung vorgenommen. Können Sie die Edit # 2 Änderungen versuchen. Ich versuche nur zu helfen. Ich weiß nicht, wo das Problem liegt. –

+0

Hallo, vielen Dank für die Hilfe, ich schätze das sehr. Ich bin auch verwirrt. Aber das Ändern der Variablen funktioniert leider auch nicht. Das Aktualisieren des Schemas gibt mir das gleiche Ergebnis. – r3m4k3