Doctrine orm 通过外国实体的身份

Doctrine orm 通过外国实体的身份,doctrine-orm,Doctrine Orm,我有一个UserProject实体将用户链接到项目,为此我希望$projects\u id和$users\u id是主键。下面是一个例子:我希望下面的方法能够奏效: <?php namespace Hoj\Entity; /** * @Entity (repositoryClass="Hoj\Entity\Repository\UserProjectRepository") * @Table(name="users_projects") */ class UserProject {

我有一个UserProject实体将用户链接到项目,为此我希望$projects\u id和$users\u id是主键。下面是一个例子:我希望下面的方法能够奏效:

<?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;
}

发生此错误可能是因为您正在查找的密钥不在关系中。。。当您运行许多数据装置时会发生这种情况:导入及其ID装置是静态的

我也有这个问题,然后清理了整个基地,包括序列,看到这样工作

考虑为应用程序创建单元测试,以确保类是正确的,从而解决问题


拥抱

有没有特别的理由不使用@manytomy?还有,这是2.0还是2.1?我记得2.1增加了对基于FK的标识的支持,其中2.0不起作用。感谢@JaniHartikainen,我简化了示例-UserProject表上实际上有更多字段,这就是我没有使用多对多的原因。我也在使用第2.1条。
<?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;