2016-12-14 4 views
0

Nach den Symfony 2.8 Buch Beispielen zum größten Teil, als totaler Anfänger habe ich Probleme beim Abrufen von Daten aus der Datenbank mit einer ManyToOne Beziehung. Ich habe eine Datenbanktabelle Kategorien und eine entfaltet. Deploys hat eine category_id, die sich auf categories.id bezieht. Eine Kategorie kann also viele Bereitstellungen haben. Die Datenbank hat Daten, wenn ich benutzerdefinierte Abfrage in Pma bekomme ich Ergebnisse.Symfony 2.8 Doctrine fetch/display data Störung

Meine Frage: Nach der Ausführung meiner Controller-Code bekomme ich eine Sammlung (siehe Bild), aber nicht mit Deploy-Elementen gefüllt, wie es scheint. Was mache ich falsch? Wie kann ich die deploy Elemente mit einem gewissen category_id

In meinem Controller-Anzeige tun I:

$category = $this->getDoctrine()->getRepository('AppBundle:Category')->find(1);  
$deploys = $category->getDeploys();  
dump($deploys); 
die(); 

Dies wird Anzeige: enter image description here

Ich habe ein Deploy Entity: (ein Teil davon, es wurde von app/Konsole)

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

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

    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="deploys") 
    * @ORM\JoinColumn(name="category_id", referencedColumnName="id") 
    */ 
    private $category; 
    // etc 

und eine Kategorie Entity generiert:

namespace AppBundle\Entity; 

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

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

    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

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

    /** 
    * @ORM\Column(type="integer", length=10) 
    */ 
    private $weight; 

    /** 
    * @ORM\OneToMany(targetEntity="Deploy", mappedBy="category") 
    */ 
    private $deploys; 

    /** 
    * Constructor 
    */ 
    public function __construct() { 
    $this->deploys = new ArrayCollection(); 
    } 

    // etc 

Antwort

3

Dies ist Lazy Loading-Funktion. Sie werden von der DB geladen, sobald Sie versuchen, auf sie zuzugreifen.

Versuchen Sie einfach auf einige Elemente dieser Sammlung zuzugreifen (z. B. über $deploys iterieren) und Sie werden sehen, es wird gut funktionieren.

Beachten Sie, dass auf Ihrem Bildschirm das Attribut initialized: false ist. Das bedeutet, dass diese Sammlung noch nicht aufgerufen wurde, also musste Doctrine sie nicht laden.

+0

Danke ich habe es zur Arbeit gebracht. – vaultboy