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, у вас один файл может быть разных типов? Почему типы файлы не перенести в сущность файл? Как и всё остальное. Но в общем меня это волновать не должно :)