我有3个实体Advert
,Applications
,ApplicationFiles
Advert
/**
* @ORM\OneToMany(targetEntity="App\Entity\Application", mappedBy="advert", orphanRemoval=true)
*/
private $applications;
Applications
/**
* @ORM\OneToMany(targetEntity="App\Entity\ApplicationFiles", mappedBy="app", orphanRemoval=true)
*/
private $applicationFiles;
ApplicationsFiles
public function getFilePath(): string
{
return Uploader::APPLICATION_FILES.'/'.$this->getName();
}
我想做的是,当我删除广告时,就是删除与其相关的Application
的每个ApplicationsFiles
-我所做的
我的问题是我无法获取每个Advert
的文件名,因此我可以删除它们。
我只能设法得到一个结果...
$appRepo = $m->getRepository(Application::class);
$rrr = $appRepo->getFilePath($post);
dd($rrr);
getFilePath
/**
* @param $s
* @return mixed
*/
public function getFilePath($s)
{
return $this->createQueryBuilder('a')
->andWhere('advert.id = :s')
->leftJoin('a.applicationFiles','applicationFiles')
->leftJoin('a.advert','advert')
->addSelect('applicationFiles.name')
->setParameter('s', $s)
->getQuery()
->getResult()
;
}
转储-
array:1 [▼
0 => array:2 [▼
0 => Application^ {#1186 ▶}
"name" => "hrm-01-application-5db552d60410c.doc"
]
]
任何帮助将不胜感激:)
答案 0 :(得分:0)
我认为在这种情况下,您不应该查询Applications
实体,而应该查询ApplicationFiles
!然后,您将获得要删除的文件数组。
$filesToDelete = $m->getRepository(ApplicationsFiles::class)
->createQueryBuilder('af')
->innerJoin('af.application', 'a')
->innerJoin('a.advert','advert')
->andWhere('advert.id = :s')
->setParameter('s', $post)
->getQuery()
->getReqult();
我不确定$post
是ID
还是Advert
对象吗?如果它是对象,那么我们可以删除第二个联接,而仅使用与Application
实体的联接。