2017-06-30 6 views
1

Ich habe Entität Project und Files. Ein Projekt kann mehrere Dateien enthalten und eine Datei gehört nur zu einem Projekt. Hier ist, wie meine BeziehungSymfony3 One-to-Many-Beziehung funktioniert nicht

In Files Entity erfolgt

/** 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Project", inversedBy="files") 
    * @ORM\JoinColumn(name="project_id", referencedColumnName="id") 
    */ 
    private $project; 

In Project Entity:

/** 
    * @var ArrayCollection 
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\Files", mappedBy="project") 
    */ 
    private $files; 

Hier ist, wie eine neue Datei nach hochgeladen wird erstellt

public function createFile($fileName,$project,User $user){ 
     $file = new Files(); 
     $file->setFilePath($this->targetDirectory."/".$fileName); 
     $file->setFromUser($user->getType()); 
     $file->setProject($project); 
     $file->setDate(new \DateTime()); 
     dump($file); 
     $this->entityManager->persist($file); 
     $this->entityManager->flush(); 
    } 

Diese Funktion wird nach dem Flush in ProjectController aufgerufen das Projekt (das gibt ID, die ich dann verwenden kann, um meine Datei zu erstellen). Hier ist der Code

$projectService->createProject($project, $user, $isWithoutTerm, self::NO_TERM_DEFAULT_VALUE); 
$filesService = $this->get('app.service.files_service'); 
foreach ($managerFiles as $managerFile) { 
    $fileName = $filesService->uploadFileAndReturnName($managerFile,$this->getParameter('files_directory')); 
    $filesService->createFile($fileName, $project, $user); 

} 

Nachdem alles eingestellt und getan habe ich ein Projekt und Dateien. In der Dateitabelle sehe ich, dass project_id mit der ID des erstellten Projekts ist. Dann versuche ich aus dem Projekt alle Dateien mit files Eigentum zu bekommen. In meinem Controller habe ich dump(project->getFiles()); die bisher gibt diese enter image description here

Auch wenn ich in meiner Datenbank-Dateien haben, die die ID des Projekts haben meine files nicht mit Dateien gefüllt ist. Ich nehme an, mein Fehler liegt in den Anmerkungen, aber ich habe keine Ahnung, wie ich das beheben kann.

Antwort

2

Relationen sind (standardmäßig) in Doctrine faul geladen. Bedeutung: Es wird nicht aus der Datenbank abgerufen, bis Sie darauf zugreifen.

Versuchen Sie, durch die getFiles Foreach. Sie werden sehen, dass Sie auf sie zugreifen können.

What is the difference between fetch="EAGER" and fetch="LAZY" in doctrine einschließlich weiterer Links in diesem Top Antwort auf Doctrine selbst, um es weiter zu erklären.

+0

Danke, es hat als Charme funktioniert. –

Verwandte Themen