Symfony2使用OneToOne关系从表中获取数据

时间:2014-04-18 06:01:40

标签: php sql symfony doctrine-orm fosuserbundle

当我想从具有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扩展

1 个答案:

答案 0 :(得分:1)

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

$admins = $this->getDoctrine()->getRepository('EiflAdminBundle:Admin')->findAll();

$usernames = array();
foreach ($admins as $admin) {
    $usernames[] = $admin->getUserAdmin()->getUsername();
}