【发布时间】:2013-02-03 02:28:12
【问题描述】:
我有一张如下表:
items
-id (pk) AI
-user_id (fk) references users
-title
-description
我有一个需要经过身份验证的用户的表单页面。我想用属于用户的项目填充选择框(比如 select * from items where user_id=loggedinUserId)
我查看了文档,发现了这个:
$builder->add('items', 'entity', array(
'class' => 'AcmeHelloBundle:Items',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('i')
->orderBy('i.title', 'ASC');
},
));
我的问题是如何以 symfony 2.1 形式将经过身份验证的用户 ID 传递给此查询?
【问题讨论】:
-
您可以使用
$this->('security.context')->getToken()->getUser();从应用程序访问用户,或使用{{ app.user }}从.twig 文件访问用户 -
我想将项目加载到属于已登录用户的选择框中。我不想加载所有项目然后检查它们是否属于该用户看法。我有很多物品实体,那会浪费资源
-
第一,你用的是学说吗?其次,您是否在数据库实体中定义了关系?如果你这样做了,你可以使用
$user->getItems()之类的用户对象直接访问它们。否则,只需从您以我之前定义的方式检索到的用户对象执行 where($user->getId())`(或类似的操作)。查询构建器中应该有一个“where”函数 -
是的,我正在使用学说,所有关系都在学说实体中定义。我已经成功地使用自定义 query_builder 在选择框中加载了项目实体。问题是我如何将登录的用户 ID 传递给 query_builder 以及如何调用
-
您应该能够使用简单的
$user->getItems()和原则加载用户的项目。否则,只需使用查询构建器的 where 函数传递 id。从安全上下文中获取用户 ID
标签: symfony symfony-2.1