【发布时间】:2014-05-05 08:40:34
【问题描述】:
我目前正在学习如何将 Doctrine ORM 与 ZF2 一起使用,目前我的目标是从简单的表连接中检索数据并将其显示到屏幕上。
我已经阅读了文档,看起来很简单。
这些是我的桌子:
user
------------------------
|user_id | name | email |
--------------------------
| 1 | John | j@b.com |
--------------------------
| 2 | Bob | b@j.com |
--------------------------
user_role_linker
--------------------------
|user_id | role_id |
--------------------------
| 1 | administrator |
--------------------------
| 2 | staff |
--------------------------
我想要实现的是我的观点列表如下:
ID Name Email Role Actions
--------------------------------------------------------
1 John j@b.com Administrator Edit
2 Bob b@j.com Staff Edit
--------------------------------------------------------
Paging goes here
----------------
这是我目前拥有的,它似乎可以工作,除了我不确定如何获取连接的表数据:
User entity::
<?php
namespace Administration\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\ManyToMany;
use Doctrine\ORM\Mapping\JoinTable;
use Doctrine\ORM\Mapping\JoinColumn;
use Doctrine\Common\Collections\ArrayCollection;
/** @ORM\Entity */
class User {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer",name="user_id")
*/
protected $user_id;
/** @ORM\Column(type="integer", name="parent_id") */
protected $parent_id;
/** @ORM\Column(type="string", name="name") */
protected $name;
/** @ORM\Column(type="string", name="email") */
protected $email;
//Setters and getters
public function getUserId() {
return $this->user_id;
}
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
public function getEmail() {
return $this->email;
}
public function setEmail($email) {
$this->email = $email;
}
/**
* @ManyToMany(targetEntity="UserRoleLinker")
* @JoinTable(
* name="user_role_linker",
* joinColumns={
* @JoinColumn(
* name="user_id",
* referencedColumnName="id")
* },
* inverseJoinColumns={
* @JoinColumn(
* name="user_id",
* referencedColumnName="id",
* unique=true)
* })
*/
private $role_id;
public function __construct()
{
$this->role_id = new ArrayCollection();
}
/** @return Collection */
public function getRoleId()
{
return $this->role_id;
}
}
用户角色链接器实体::
<?php
namespace Administration\Entity;
use Doctrine\ORM\Mapping as ORM;
/** @ORM\Entity */
class UserRoleLinker {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer",name="user_id")
*/
protected $user_id;
/** @ORM\Column(type="string", name="role_id") */
protected $role_id;
/** @param User|null */
public function getRoleId() {
return $this->role_id;
}
}
我的管理控制器::
public function usersAction() {
$em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$userFunctions = new UserFunction($em);
$userArray = $userFunctions->getUsers();
$viewModel = new ViewModel(array('users' => $userArray));
return $viewModel;
}
这调用了我的 UserFunctions 类::
public function getUsers()
{
//This function returns the users
return $this->em->getRepository('Administration\Entity\User')->findAll();
}
在我看来,我列出的数据如下:
<?php
foreach ($this->users AS $user) {
?>
<tbody>
<tr class="odd gradeX">
<td width="5%"><?php echo $user->getUserId(); ?></td>
<td><?php echo $user->getName(); ?></td>
<td><?php echo $user->getEmail(); ?></td>
<td class="center">*** HOW DO I SHOW THE ROLE ?? ***</td>
<td>Edit</td>
</tr>
<?php } ?>
如何获取要在视图中显示的角色?
【问题讨论】:
标签: orm doctrine-orm zend-framework2