我有一个Project
实体,在创建新项目时,我需要能够上传文件。出于这个原因,我创建了Files
实体,它保存了路径和projectID。我的问题是我不知道如何在创建后检索它。这是我想要做的事情
$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);
$filesService->createFile($fileName,$project->getId(),$user);
}
目前我的$project
没有ID,这意味着我无法创建新文件。我听说我可以使用$ em-> retrieve(object),但实际的刷新不是在控制器中完成的。如果我尝试在我的createProject
函数中使用它并因某些原因返回它我不能。 PHPStorm说这是一个无效功能。以下是createProject
$project->setFromUser($user->getFullName());
$project->setDepartment($user->getDepartment());
$project->setIsOver(false);
$project->setDate(new \DateTime());
if($isWithoutTerm){
$project->setTerm(\DateTime::createFromFormat('Y-m-d', $noTermDefaultValue));
}
$this->entityManager->persist($project);
$this->entityManager->flush();
有没有办法在刷新后检索projectID并且能够在我的控制器中使用它?
答案 0 :(得分:1)
这可能是一个竞争条件,其中$项目尚未可用,因此服务无法加载它,因此getId()
失败。
首先,创建项目实体:
//build your $project
$this->entityManager->flush();
其次,将此$项目发送到您的"服务"
$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);
$filesService->createFile($fileName,$project->getId(),$user);
}
更具体地说,如果你将它包装在try / catch中,你可以确切地确定发生了什么:
try {
$project = new Project();
//build project
$this->entityManager->flush();
//load $projectService..
$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);
$filesService->createFile($fileName,$project->getId(),$user);
}
}
catch(\Exception $e) {
//$e->getMessage() will tell you if you're good to go, or if there
//is actually an issue
}
但是,它也可能像PHPStorm一样简单,无法反省您的getId()
方法,因此无法理解它。或getId()
实际上并没有返回id。
答案 1 :(得分:0)
从3.2和3.3升级Symfony解决了这个问题。我不认为这是由于版本本身,而是删除了被删除的东西,改变了很多东西,修改了它。