create table user
(
id int unsigned auto_increment
primary key,
username varchar(255) default '' not null,
email varchar(255) default '' not null,
name varchar(255) default '' not null
)
charset = utf8mb3;
create table file_target
(
id int unsigned auto_increment
primary key,
file_id int unsigned null,
file_type int unsigned default '0' not null,
target_id int unsigned default '0' not null,
target_type int unsigned default '0' not null
)
charset = utf8mb3;
create table file
(
id int unsigned auto_increment
primary key,
user_id int unsigned null,
path varchar(255) default '' not null
)
charset = utf8mb3;
/**
* @ORM\Entity
* @ORM\Table(name="user")
*/
class User
{
/**
* @var ArrayCollection|File[]
* @ORM\ManyToMany(targetEntity="Core\Domain\File\Entity\File")
* @ORM\JoinTable(
* name="file_target",
* joinColumns={
* @ORM\JoinColumn(name="target_id", referencedColumnName="id"),
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="file_id", referencedColumnName="id")
* }
* )
*/
private $file;
}
/**
* @ORM\Entity
* @ORM\Table(name="file_target")
*/
class FileTarget
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $file_id;
/**
* @ORM\Column(type="integer")
*/
private $file_type;
/**
* @ORM\Column(type="integer")
*/
private $target_id;
/**
* @ORM\Column(type="integer")
*/
private $target_type;
// ...
}
/**
* @ORM\Entity
* @ORM\Table(name="file")
*/
class File
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $user_id;
/**
* @ORM\Column(type="string")
*/
private $path;
// ...
}
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()
и обращаемся по свойствам объекта куда нужно.User
, по коду это получается класс File
public function getUserWithTargetType(int $targetType): User {
//через foreach перебираете User и по условию $targetType возвращаете User
}