【问题标题】:retrieve the Many side of association in Doctrine2检索 Doctrine2 中关联的多方面
【发布时间】:2011-08-03 13:03:46
【问题描述】:

我有两个实体,一个是 Role ,另一个是 User ,我想构建表单和报告来添加和显示每个角色及其用户,并创建一个具有一个 Role 的用户,因此它的 User:Role (One-To-很多),我设法通过 Doctrine 2 向用户添加角色,但我无法向以下每个角色显示用户是我的代码

<?php

/**
* Description of Role
* @Entity
* @Table=(name"Roles")
* @author alaaqashou
*/
class Role {
//put your code here

/**
 *
 * @var integer $id
 * @Column(name="id", type="integer",nullable=false)
 * @Id
 * @GeneratedValue(strategy="IDENTITY")
 */
private $id;

/**
 * @Column(length=100,nullable=false,unique=true)
 * @var type 
 */

private $name;

/**
 * @OneToMany(targetEntity="User" ,mappedBy="Role")
 * @var type 
 */

private $users;

public function __construct() {
   $this->users=new \Doctrine\Common\Collections\ArrayCollection();
}

public function getUsers() {
    return $this->users;
}

public function setUsers($user) {
    $this->users->add($user);
}

}

/**
* Description of User
*@Entity
* @Tabel(name="Users")
* @author alaaqashou
*/
class User {
//put your code here

/**
 *
 * @var integer $id
 * @Column(name="id", type="integer",nullable=false)
 * @Id
 * @GeneratedValue(strategy="IDENTITY")
 */
private $id;

/**
 *
 * @Column(length=255,nullable=false,unique=true)
 * 
 * 
 * @var type 
 * 
 */

private $role;

function __construct() {
    $this->created=new \DateTime(date("Y-m-d H:i:s"));
}

public function getRole() {
    return $this->role;
}

public function setRole($role) {
    $this->role = $role;
}

}

我收到通知:未定义索引:尝试执行以下操作时出现角色错误

我的服务

     public function listAllRole()
      {
     return $this->em->getRepository('sihha\Entity\Role')->findAll();

     }
$roles=$this->roleService->listAllRole();

$users=$roles[0]->getUsers();
// I even tried  $users=$roles[0]->getUsers()->toArray();

$user=$users[0];

请帮忙!!!

【问题讨论】:

  • 我无法访问 DoctrineArrayCollection 的元素,但奇怪的是你可以这样做 $role->getUsers()->add($user);

标签: php zend-framework orm doctrine-orm


【解决方案1】:

我认为您的问题在于注释。尝试替换 mappedBy='Role' 宽度 mappedBy='role' (即输入小写的“角色”)。

我刚刚在我的一个实体中尝试了mappedBy="Table",它给了我与您似乎相同的结果。

【讨论】:

  • 非常感谢,当我看到你的回答时,我是对的,但我仔细检查了它,现在它工作了,谢谢,但是你能解释一下为什么,我怕我会面对这样奇怪的错误,一切都应该是有原因的!
  • 我仔细检查了 Doctrine 文档,你是对的,我很痛苦,因为我无法验证我的代码语法,我希望在未来的 zend 版本中集成学说。
  • 引用 Doctrine 文档:“mappedBy 属性指定实体中作为关系所有者的字段。” (doctrine-project.org/docs/orm/2.0/en/reference/…) 所以基本上我猜默认情况下任何属性的字段名都是小写的。您可以通过使用注释 '@ORM\Column(name="[field_name]")' 来更改它。例如,如果要将 name 属性设置为“Field_name”,则必须使用 mappedBy='Field_name'。
  • 再次感谢您拯救了我的一天
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多