当我想从具有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扩展
答案 0 :(得分:1)
findAll
返回一个数组。例如,这将起作用:
$admins = $this->getDoctrine()->getRepository('EiflAdminBundle:Admin')->findAll();
$usernames = array();
foreach ($admins as $admin) {
$usernames[] = $admin->getUserAdmin()->getUsername();
}