У меня есть сущность UserProject, связывающая пользователей с проектами, для этого я бы хотел, чтобы $ projects_id и $ users_id были первичными ключами. Ниже приведен пример: http://www.doctrine -project.org / docs / orm / 2.0 / en / tutorials / смесь-primary-keys.html # identity-through-foreign-entity Я ожидал что-то вроде следующего на работу:
<?php
namespace Hoj\Entity;
/**
* @Entity (repositoryClass="Hoj\Entity\Repository\UserProjectRepository")
* @Table(name="users_projects")
*/
class UserProject
{
/**
* @Id
* @ManyToOne(targetEntity="Project", cascade={"all"}, fetch="EAGER", inversedBy="userProject")
*/
private $project;
/**
* @Id
* @ManyToOne(targetEntity="User", cascade={"all"}, fetch="EAGER", inversedBy="userProject")
*/
private $user;
public function __get($property)
{
return $this->$property;
}
public function __set($property, $value)
{
$this->$property = $value;
}
}
... однако попытка построить это приводит к ошибке: «Идентификатор / первичный ключ не указан для Entity ...»
Моя текущая работа (которая правильно распознает отношения) состоит в том, чтобы установить идентификаторы вручную следующим образом:
<?php
namespace Hoj\Entity;
/**
* @Entity (repositoryClass="Hoj\Entity\Repository\UserProjectRepository")
* @Table(name="users_projects")
*/
class UserProject
{
/** @Id @Column(type="integer", length=11) */
private $users_id;
/** @Id @Column(type="integer", length=11) */
private $projects_id;
/**
* @var Project
* @ManyToOne(targetEntity="Project", cascade={"all"}, fetch="EAGER")
* @JoinColumns({
* @JoinColumn(name="projects_id", referencedColumnName="id")
* })
*/
private $project;
/**
* @var User
* @ManyToOne(targetEntity="User", cascade={"all"}, fetch="EAGER")
* @JoinColumns({
* @JoinColumn(name="users_id", referencedColumnName="id")
* })
*/
private $user;
public function __get($property)
{
return $this->$property;
}
public function __set($property, $value)
{
$this->$property = $value;
}
}
Таблицы проекта и пользователя объединяются следующим образом:
/**
* @param \Doctrine\Common\Collections\Collection $userProject
* @OneToMany(targetEntity="UserProject", mappedBy="project", cascade={"persist","remove"})
*/
private $userProject;