Symfony2从具有OneToOne关系的表中获取数据


Symfony2 fetch data from table with OneToOne relationships

当我想从具有OneToOne关系的表中获取数据时,遇到了问题。这里我有一个表tbl_user,我与一个名为tbl_admin的表建立了关系。

User.php

<?php
namespace Eifl'MainBundle'Entity;
use FOS'UserBundle'Entity'User as BaseUser;
use Doctrine'ORM'Mapping as ORM;
/**
 * User
 * @ORM'Entity
 * @ORM'Table(name="tbl_user")
 */
class User extends BaseUser
{
    /**
     * @var string
     * @ORM'Id
     * @ORM'Column(name="user_id",type="string")
     */
    protected $id;
    /**
     * @ORM'OneToOne(targetEntity="Eifl'AdminBundle'Entity'Admin", mappedBy="userAdmin", cascade="remove")
     */
    public $userAdminType;
    /**
     * Get id
     *
     * @return string
     */
    public function getId()
    {
        return $this->id;
    }
}

Admin.php

<?php
namespace Eifl'AdminBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
 * Admin
 *
 * @ORM'Entity
 * @ORM'Table(name="tbl_admin")
 * @ORM'Entity(repositoryClass="Eifl'AdminBundle'Entity'AdminRepository")
 */
Class Admin
{
    /**
     * @ORM'Id
     * @ORM'Column(name="id", type="integer")
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @ORM'OneToOne(targetEntity="Eifl'MainBundle'Entity'User", inversedBy="userAdminType")
     * @ORM'JoinColumn(name="User_Admin", referencedColumnName="user_id")
     */
    public $userAdmin;
    /**
     * @ORM'Column(name="position", type="string")
     * @var string
     */
    public $position;
    /**
     * @return string
     */
    public function getUserAdmin()
    {
        return $this->userAdmin;
    }
    /**
     * @param mixed $userAdmin
     * @return string
     */
    public function setUserAdmin($userAdmin)
    {
        $this->userAdmin = $userAdmin;
        return $this;
    }
    /**
     * @param string $position
     * @return string
     */
    public function setPosition($position)
    {
        $this->position = $position;
        return $this;
    }
    /**
     * @return string
     */
    public function getPosition()
    {
        return $this->position;
    }
    /**
     * @return mixed
     */
    public function getId()
    {
        return $this->id;
    }
}

现在,在我的controller.php中,当我使用以下代码从admin获取数据时:

$admin = $this->getDoctrine()->getRepository('EiflAdminBundle:Admin')->findOneBy(array('userAdmin'=>'MyIdUser'));
$username= $admin->getUserAdmin()->getUsername();

我可以使用函数getUserAdmin()来获取我在类user中声明的一些函数,例如函数getUsername()来获取用户名或函数getId()来获取用户id。但上面的代码只获取一条记录。我想从表admin中获取多条记录,所以我将上面的代码更改为以下代码:

$admin = $this->getDoctrine()->getRepository('EiflAdminBundle:Admin')->findAll();
$username= $admin->getUserAdmin()->getUsername();

我遇到了问题。错误显示:

Error: Call to a member function getUserAdmin() on a non-object in ...

我不能使用函数getUserAdmin()来调用类User中的另一个函数。如何解决此问题?

注意:user类的函数扩展自FOSUserBundle

findAll返回一个数组。例如,这将起作用:

$admins = $this->getDoctrine()->getRepository('EiflAdminBundle:Admin')->findAll();
$usernames = array();
foreach ($admins as $admin) {
    $usernames[] = $admin->getUserAdmin()->getUsername();
}