我的用户模型与profil
一对多(单向与联接表的单向)关系但是当我做
时$user = $userRepository = $entityManager->getRepository('User');
$user = $userRepository->findOneBy(
array('username' => $username,
'password' => $password)
);
echo $user->getProfils()->getLibelle();
或
echo $user->getProfils()[0];
我什么都没有。没有错误。没有结果。我的桌子是创建和完成的。
如果我做
$user = $userRepository = $entityManager->getRepository('User');
$user = $userRepository->findOneBy(
array('username' => $username,
'password' => $password)
);
echo $user->getUsername();
我的结果很好。
user.php模型
<?php
/**
* @Entity @Table(name="users")
**/
class User
{
/** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string") **/
protected $username;
/** @Column(type="string") **/
protected $password;
/** @Column(type="string") **/
protected $email;
/**
* Many User have Many Profils.
* @ManyToMany(targetEntity="Profil")
* @JoinTable(name="users_profils",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="profil_id", referencedColumnName="id", unique=false)}
* )
*/
private $profils;
public function __construct()
{
$this->profils = new DoctrineCommonCollectionsArrayCollection();
}
public function getId()
{
return $this->id;
}
public function getUsername()
{
return $this->username;
}
public function setUserName($username)
{
$this->username = $username;
}
public function getPassword()
{
return $this->password;
}
public function setPassword($password)
{
$this->password = $password;
}
public function getEmail()
{
return $this->email;
}
public function setEmail($email)
{
$this->email = $email;
}
public function getProfils()
{
return $this->profils;
}
}
?>
profil.php模型
<?php
/**
* @Entity @Table(name="profils")
**/
class Profil
{
/** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string") **/
protected $libelle;
/** @Column(type="integer") **/
protected $level;
public function getId()
{
return $this->id;
}
public function getLibelle()
{
return $this->libelle;
}
public function setLibelle($libelle)
{
$this->libelle = $libelle;
}
public function getLevel()
{
return $this->level;
}
public function setLevel($level)
{
$this->level = $level;
}
}
?>
你能告诉我我缺少什么吗?
预先感谢。
更新:Profil.php:
class Profil
{
/** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string") **/
protected $libelle;
/** @Column(type="integer") **/
protected $level;
/**
* @ManyToOne(targetEntity="User", inversedBy="profils")
* @JoinColumn(unique=false)
*/
private $user;
user.php:
/** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string") **/
protected $username;
/** @Column(type="string") **/
protected $password;
/** @Column(type="string") **/
protected $email;
/**
* @OneToMany(targetEntity="Profil", mappedBy="user")
*/
private $profils;
我尝试了:
print_r($user->getProfils()->toArray());
结果:array()
好吧,我找到了解决方案,如果可以帮助某人:
这是最终代码。
user.php
class User
{
/** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string") **/
protected $username;
/** @Column(type="string") **/
protected $password;
/** @Column(type="string") **/
protected $email;
/**
* Many User have Many Profils.
* @ManyToMany(targetEntity="Profil")
* @JoinTable(name="users_profils",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="profil_id", referencedColumnName="id", unique=false)}
* )
*/
protected $profils;
public function __construct()
{
$this->profils = new DoctrineCommonCollectionsArrayCollection();
}
public function getProfils()
{
return $this->profils ;
}
profil.php
/**
* @Entity @Table(name="profils")
**/
class Profil
{
/** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string") **/
protected $libelle;
/** @Column(type="integer") **/
protected $level;
protected $user;
现在我们可以从一个用户那里获得所有profils。
$userRepository = $entityManager->getRepository('User');
$user = $userRepository->findOneBy(
array('username' => $username,
'password' => $password)
);
$profils = $user->getProfils()->toArray();
foreach($profils as $profil){
echo $profil->getLibelle() .'<br>';
echo $profil->getLevel().'<br>';
echo $profil->getId().'<br>';
}
编辑:问题是$ user-> getProfils不返回一个对象但是数组集合。
首先,您需要使用getProfils() -> toarray()()
将其转换为现在您可以迭代并致电其Getter。
$profils = $user->getProfils()->toArray();
for($profils as profil){
$libelle = $profil->getLibelle()
}
我有一个关系。因此用户可以拥有许多profils。