Symfony3一对多关系不起作用

时间:2017-06-30 08:46:39

标签: php symfony one-to-many

我有实体ProjectFiles。一个项目可以有多个文件,一个文件只属于一个项目。以下是我的关系如何完成

Files实体

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

Project实体中:

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

以下是上传后如何创建新文件

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();
    }

在刷新项目后,在ProjectController中调用此函数(它给出了ID,然后我可以使用它来创建我的文件)。这是代码

$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);

 }

完成所有设置后,我有一个项目和文件。在文件表中,我看到project_id具有已创建项目的ID。然后我尝试使用files属性从项目中获取所有文件。在我的控制器中,我有dump(project->getFiles());到目前为止返回此信息 enter image description here

即使我的数据库文件中包含项目的ID,我的files也没有填充文件。我想我的错误在于注释,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

默认情况下,Doctrine中的关系是懒惰的。含义:在您访问它之前,它不会从数据库中获取。

尝试通过getFiles进行操作。你会看到你可以访问它们。

enter image description here包括对Doctrine本身的最佳答案的进一步链接,以进一步解释。