1. Чтобы разбить
ManyToMany
, на
ManyToOne
и
OneToMany
, вам нужно вручную выделить сущность
FileTarget
и вручную там расписать связи. Соответственно в сущности
FileTarget
Вам нужно сделать что-то такое.
/**
* @ORM\Entity
* @ORM\Table(name="file_target")
*/
class FileTarget
{
//другие свойства.
/**
* @ManyToOne(targetEntity="File" , inversedBy="fileTarget")
* @JoinColumn(name="file_id", referencedColumnName="id")
*/
private File|null $file= null;
}
В классе
File
создайте коллекцию
OneToMany
https://www.doctrine-project.org/projects/doctrine...
Далее тоже самое делаем
ManyToOne
в сущности
File
, но уже на
User
, а в самом
User
уже коллекцию
OneToMany
на
File
.
В итоге в сущности
User
вы сможете получить коллекцию на ваши file.
class User
{
//другие свойства и функции.
/** @return File[] */
public function getFiles(): array {
return $this->files->toArray();
}
}
Далее через
foreach
достаём нужные объекты из
getFiles()
и обращаемся по свойствам объекта куда нужно.
2. Это делается через отельную функцию в сущности или лучше всего в сервисе.
Создаёте функцию в классе, где у вас есть доступ к
User
, по коду это получается класс
File
public function getUserWithTargetType(int $targetType): User {
//через foreach перебираете User и по условию $targetType возвращаете User
}
Хотя я бы это вынес в отдельный сервис скорее всего.
П.С Для меня странной выглядит ваша сущность FileTarget, у вас один файл может быть разных типов? Почему типы файлы не перенести в сущность файл? Как и всё остальное. Но в общем меня это волновать не должно :)