当我想从具有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();
}