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. Подробнее об этом можно прочитать по ссылке: [ссылка на документацию].
Затем, в сущности "File" создается связь ManyToOne с сущностью "User", а в сущности "User" создается коллекция OneToMany с сущностью "File". В итоге, в сущности "User" вы можете получить коллекцию файлов следующим образом:
```
class User
{
//другие свойства и функции
/**
* @return File[]
*/
public function getFiles(): array {
return $this->files->toArray();
}
}
```
Затем, используя цикл foreach, можно извлекать нужные объекты из метода getFiles() и обращаться к их свойствам по необходимости.
2. Для выполнения данной задачи можно создать отдельную функцию в сущности "File" или же лучше всего вынести ее в сервис. Создайте функцию в классе, где у вас есть доступ к объекту "User". Примерно, функция может выглядеть следующим образом:
```
class File {
public function getUserWithTargetType(int $targetType): User {
// в цикле foreach перебираете пользователей и по условию $targetType возвращаете нужного пользователя
}
}
```
Однако, я бы рекомендовал вынести эту логику в отдельный сервис.
Примечание: Мне кажется странным, что у вас сущность "FileTarget" содержит только одно свойство "file". Позволяет ли название "FileTarget" быть одному файлу с разными типами? Возможно, стоит разместить типы файлов в самой сущности "File" вместе со всей остальной информацией. Однако, это уже зависит от вашей специфической задачи и требований.