Php 为什么多对多关系是空的?
我正在Symfony 2.1.3上构建一个带有用户认证部分的网站,其中包含条令2。 每个用户都可以是“用户组”的成员,并且每个用户组可以包含许多用户 因此,这是一种多对多的关系 我按照安全教程来验证我的用户,它工作得非常好。 对密码进行编码;数据库关系运行良好 我有一个服务,它处理“loginsucess”事件,并将用户添加到会话中。 我认为它工作正常,因为我在父前端控制器中找到了我的用户属性Php 为什么多对多关系是空的?,php,mysql,doctrine-orm,many-to-many,symfony-2.1,Php,Mysql,Doctrine Orm,Many To Many,Symfony 2.1,我正在Symfony 2.1.3上构建一个带有用户认证部分的网站,其中包含条令2。 每个用户都可以是“用户组”的成员,并且每个用户组可以包含许多用户 因此,这是一种多对多的关系 我按照安全教程来验证我的用户,它工作得非常好。 对密码进行编码;数据库关系运行良好 我有一个服务,它处理“loginsucess”事件,并将用户添加到会话中。 我认为它工作正常,因为我在父前端控制器中找到了我的用户属性 public function onAuthenticationSuccess(Request $r
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
$session = $request->getSession();
$session->set('_user', $token->getUser());
if ($session->has('referer')) {
if (($session->get('referer') !== null) && ($session->get('referer') !== '')) {
$response = new RedirectResponse($session->get('referer'));
} else {
$response = new RedirectResponse($request->getBaseUrl() . '/');
}
} else {
// if no referer then go to homepage
$response = new RedirectResponse($request->getBaseUrl() . '/');
}
return $response;
}
但是现在,我想获取经过身份验证的当前用户的组,它会给我一个空数组
// Somewhere in a controller action.
$session = $this->getRequest()->getSession();
$current_user = $session->get('_user');
echo '<pre>';
exit(var_dump($current_user));
object(Me\MyProject\CoreBundle\Entity\User)#38 (16) {
[...]
["groups":"Me\MyProject\CoreBundle\Entity\User":private] => object(Doctrine\ORM\PersistentCollection)#34 (9) {
["snapshot":"Doctrine\ORM\PersistentCollection":private] => array(0) {
}
["owner":"Doctrine\ORM\PersistentCollection":private] => NULL
["association":"Doctrine\ORM\PersistentCollection":private] => NULL
["em":"Doctrine\ORM\PersistentCollection":private] => NULL
["backRefFieldName":"Doctrine\ORM\PersistentCollection":private] => NULL
["typeClass":"Doctrine\ORM\PersistentCollection":private] => NULL
["isDirty":"Doctrine\ORM\PersistentCollection":private] => bool(false)
["initialized":"Doctrine\ORM\PersistentCollection":private] => bool(false)
["coll":"Doctrine\ORM\PersistentCollection":private] => object(Doctrine\Common\Collections\ArrayCollection)#33 (1) {
["_elements":"Doctrine\Common\Collections\ArrayCollection":private] => array(0) {
}
}
}
}
仅当调用函数getGroups时,才会加载ArrayCollection\u元素,因为默认情况下,急切模式处于非活动状态。getGroups()函数的结果是什么
急切模式(例如:
@ManyToOne(targetEntity=“\My\Model\User\User”,fetch=“EAGER”)
)强制doctrine2加载所有数据。getGroups()也返回空集合,但我没有强制急切模式。您如何处理yml?也许您可以使用fetch:eager
或fetchmode:eager
。对不起,我不使用yml语法。我想查看yml配置文件。我已编辑。fetch:eager引发错误,fetchmode:eager不会更改任何内容:(
Me\MyProject\CoreBundle\Entity\User:
type: entity
repositoryClass: FSB\Intranet\CoreBundle\Repository\UserRepository
table: users
fields:
id:
id: true
type: integer
unsigned: false
nullable: false
generator:
strategy: IDENTITY
[...]
manyToMany:
groups:
targetEntity: Usergroup
inversedBy: users
joinTable:
name: usergroups_for_user
joinColumns:
user_id:
referencedColumnName: id
inverseJoinColumns:
usergroup_id:
referencedColumnName: id
lifecycleCallbacks: { }