提问人:Teffi 提问时间:12/22/2012 最后编辑:Teffi 更新时间:12/22/2012 访问量:1298
Symfony 2 使用外键获取数据返回未定义索引
Symfony 2 fetching data using foreign key returns Undefined index
问:
我有 3 个实体:User、UserRole、UserProfile。 我的 userprofile 实体的主键实际上是来自用户实体的外键,即 UserId。每次我尝试使用外键 userid 访问 userProfile 时。我总是收到 userID 未定义索引的错误。
这是确切的错误消息
**>注意:未定义的索引:userID
C:\wamp\www\SymfonyFolder\供应商\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php 2583** 行
控制器 ..... ....
public function profileAction($id)
{
$user = new User();
$user_repository = $this->getDoctrine()->getRepository('AcmePodUserBundle:User');
$user = $user_repository->find($id);
$userprofile = new UserProfile();
$userprofile_repository = $this->getDoctrine()->getRepository('AcmeUserBundle:UserProfile');
$userprofile = $userprofile_repository->find($user);
return new Response($userprofile); // this is not the actual output i need. I just used this simply to test if userprofile has some value.
}
用户.orm.yml
type: entity
table: reg_user
oneToOne:
id:
userID:
column: user_id
type: integer
generator: { strategy: AUTO }
targetEntity: UserProfile
mappedBy: userProfileID
用户配置文件.orm.yml
type: entity
table: users_profile
id:
userProfileID:
associationKey: true
fields:
firstName:
column: first_name
type: string
length: 255
unique: true
nullable: false
lastName:
column: last_name
type: string
length: 255
nullable: false
oneToOne:
userProfileID:
targetEntity: User
inversedBy: userID
joinColumn:
name: fk_user_id
referencedColumnName: user_id
用户 .php
class User implements AdvancedUserInterface, \Serializable
{
// @var auto integer
protected $userID;
// @var string
protected $userName;
// @var string
protected $salt;
// @var string - must not persist to DB
protected $plainPassword;
// @var string
protected $password;
// @var string
protected $email;
// @var boolean
protected $isActive;
// @var string
protected $confirmationCode;
// @var datetime
protected $createdAt;
// @var string - must not persist to DB
protected $chooseRole;
// @var for roles fk_role_id - mapped
protected $userRole;
/* _construct() is an instant instance of the entity*/
public function __construct()
{
date_default_timezone_set('Asia/Manila');
$this->createdAt = new \DateTime("now");
//all users are inactive upon registration.
//isActive turns 'true' with the use of email confirmation
$this->isActive = false;
}
public function __toString()
{
return strval($this->userID);
}
/**
* Get userID
*
* @return integer
*/
public function getUserID()
{
return $this->userID;
}
/**
* Set userName
*
* @param string $userName
* @return User
*/
public function setUserName($userName)
{
$this->userName = $userName;
return $this;
}
/**
* Get userName
*
* @return string
*/
public function getUserName()
{
return $this->userName;
}
/**
* Set salt
*
* @param string $salt
* @return User
*/
public function setSalt($salt)
{
$this->salt = $salt;
return $this;
}
/**
* Get salt
*
* @return string
*/
public function getSalt()
{
return $this->salt;
}
public function setPlainPassword($plainPassword)
{
$this->plainPassword = $plainPassword;
return $this;
}
public function getPlainPassword()
{
return $this->plainPassword;
}
/**
* Set password
*
* @param string $password
* @return User
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
* Get password
*
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* Set email
*
* @param string $email
* @return User
*/
public function setEmail($email)
{
$this->email = $email;
return $this;
}
/**
* Get email
*
* @return string
*/
public function getEmail()
{
return $this->email;
}
/**
* Set isActive
*
* @param boolean $isActive
* @return User
*/
public function setIsActive($isActive)
{
$this->isActive = $isActive;
return $this;
}
/**
* Get isActive
*
* @return boolean
*/
public function getIsActive()
{
return $this->isActive;
}
/**
* Set confirmationCode
*
* @param string $confirmationCode
* @return User
*/
public function setConfirmationCode($confirmationCode)
{
$this->confirmationCode = $confirmationCode;
return $this;
}
/**
* Get confirmationCode
*
* @return string
*/
public function getConfirmationCode()
{
return $this->confirmationCode;
}
/**
* Set createdAt
*
* @param \DateTime $createdAt
* @return User
*/
public function setCreatedAt($createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
/**
* Get createdAt
*
* @return \DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
public function setChooseRole($chooseRole)
{
$this->chooseRole = $chooseRole;
return $this;
}
public function getChooseRole()
{
return $this->chooseRole;
}
/**
* Set userRole
*
* @param CloudPod\UserBundle\Entity\UserRoles $userRole
* @return User
*/
public function setUserRole(\CloudPod\UserBundle\Entity\UserRoles $userRole = null)
{
$this->userRole = $userRole;
return $this;
}
/**
* Get userRole
*
* @return CloudPod\UserBundle\Entity\UserRoles
*/
public function getUserRole()
{
return $this->userRole;
}
/**
* @see \Serializable::serialize()
*/
public function serialize()
{
return serialize(array(
$this->userID,
));
}
/**
* @see \Serializable::unserialize()
*/
public function unserialize($serialized)
{
list (
$this->userID,
) = unserialize($serialized);
}
public function isAccountNonExpired()
{ return true; }
public function isAccountNonLocked()
{ return true; }
public function isCredentialsNonExpired()
{ return true; }
public function isEnabled()
{ return $this->isActive; }
/**
* @inheritDoc
*/
public function eraseCredentials()
{
}
public function getRoles()
{
return array($this->userRole);
}
}
我认为问题出在我的控制器代码上。有人可以告诉我编码它的正确方法吗? PS 我将用户与用户配置文件分开,因为我不想在表格中将用户帐户数据(如用户名、角色等)与其用户信息混淆。
答: 暂无答案
上一个:使用分页时未定义索引
评论
findByUserId($id)