Идентификация через иностранных лиц - PullRequest
1 голос
/ 18 сентября 2011

У меня есть сущность 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;  

1 Ответ

0 голосов
/ 14 июня 2013

вероятно, эта ошибка возникает из-за того, что ключ, который вы ищете, не находится в связи ... это происходит, когда вы запускаете много данных-фикстур: импорт и его фиксации с идентификаторами статичны ...

У меня тоже была эта проблема, затем почистил всю базу, включая последовательность, и вижу, как это работает.

Подумайте о создании юнит-тестов для приложения, чтобы убедиться, что ваш класс правильный, и, таким образом, решить проблему.

объятие

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...