доктрина получить результаты отношения OneToMany - PullRequest
0 голосов
/ 27 октября 2019

У меня есть 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"
 ]
]

Любая помощь будет очень признателен:)

1 Ответ

0 голосов
/ 28 октября 2019

Я думаю, что в этом случае вам следует запросить не 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 var это ID или Advert объект? Если это объект, то мы можем удалить второе соединение и использовать только соединение с Application сущностью.

...