0

我正在寻找一些帮助来解释为什么我的 OneToMany 学说关系只返回一个值。我的数据模型有三个表。用户、授权和应用程序。授权表是将用户映射到应用程序的粘合剂,还包含一个访问级别字段以指示他们对该应用程序的访问级别。

我有一个用户对三个不同的应用程序有三个授权条目,但由于某种原因,学说只加载了其中一个授权记录。我在下面包含了我的完整数据模型。有问题的属性是 Webusers 表中的“授权”。

有人知道我在做什么错吗?

class Webusers {
/**
 * @var integer
 *
 * @ORM\Column(name="userid", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $userid;    
/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\ManyToMany(targetEntity="Applications", mappedBy="userid")
 */
private $applications;

/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\OneToMany(targetEntity="Authorization", mappedBy="user")
 */
private $authorization;

/**
 * Constructor
 */
public function __construct() {
    $this->applications = new \Doctrine\Common\Collections\ArrayCollection();
    $this->authorization = new \Doctrine\Common\Collections\ArrayCollection();  
}

class Authorization {
/**
 * @var integer
 *
 * @ORM\Column(name="accesslevel", type="integer", nullable=false)
 */
private $accesslevel;

/**
 * @var integer
 *
 * @ORM\Column(name="applicationid", type="integer", nullable=false)
 * $ORM\Id
 */
private $applicationid;

/**
 * @var integer
 *
 * @ORM\Column(name="userid", type="integer", nullable=false)
 * @ORM\Id
 */
private $userid;

 /**
 * @var \Webusers
 *
 * @ORM\ManyToOne(targetEntity="Webusers")
 * @ORM\JoinColumn(name="userid", referencedColumnName="userid")
 */
private $user;
}

class Applications {
/**
 * @var integer
 *
 * @ORM\Column(name="applicationid", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $applicationid;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=50, nullable=false)
 */
private $name;
/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\ManyToMany(targetEntity="Webusers", inversedBy="applicationid")
 * @ORM\JoinTable(name="authorization",
 *   joinColumns={
 *     @ORM\JoinColumn(name="applicationid", referencedColumnName="applicationid")
 *   },
 *   inverseJoinColumns={
 *     @ORM\JoinColumn(name="userid", referencedColumnName="userid")
 *   }
 * )
 */
private $userid;

/**
 * Constructor
 */
public function __construct()
{
    $this->userid = new \Doctrine\Common\Collections\ArrayCollection();
}
}
4

1 回答 1

0

我能够通过确保将网络用户和应用程序关系都指定为 ManyToOne 并为它们提供 @ORM\Id 属性来解决此问题,因为它们构成了一个复合主键。

我认为这失败的主要原因是我没有将授权与应用程序相关联。

我的新模型的关键点如下:

class Webusers {
 /**
 * @var \Doctrine\Common\Collections\Collection
 * @ORM\OneToMany(targetEntity="Authorization", mappedBy="user")
 */
 private $authorization;
 }

class Authorization {
/**
 *
 * @ORM\Id
 * @ORM\ManyToOne(targetEntity="Applications")
 * @ORM\JoinColumn(name="applicationid", referencedColumnName="applicationid")
 */
private $application;

 /**
 * 
 * @ORM\Id
 * @ORM\ManyToOne(targetEntity="Webusers")
 * @ORM\JoinColumn(name="userid", referencedColumnName="userid")
 */
private $user;
}

class Applications {
/**
 * @ORM\OneToMany(targetEntity="Authorization", mappedBy="application")
 */
 private $authorization;
}
于 2013-08-31T16:01:14.240 回答