学说获得一对多关系结果

时间:2019-10-27 08:21:21

标签: php sql symfony doctrine

我有3个实体AdvertApplicationsApplicationFiles

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"
 ]
]

任何帮助将不胜感激:)

1 个答案:

答案 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();

我不确定$postID还是Advert对象吗?如果它是对象,那么我们可以删除第二个联接,而仅使用与Application实体的联接。