【问题标题】:Bind id to doctrine statements将 id 绑定到学说声明
【发布时间】:2014-09-29 02:00:04
【问题描述】:

我有三张桌子。一个是存储用户的用户表。另一个是存储位置的位置表。在第三个表中,存储了客户 ID。

每个用户都有一个客户 ID,每个位置也有一个客户 ID。

我想创建一个选择字段,其中仅列出客户 ID 与用户获得的相同的位置。

其实是这样的:

$this->createFormBuilder($user)
->add('locations', 'entity', array('class' =>'PrUserBundle:Location','property' => 'name'))
//......
->getForm();

这将导致所有存储的条目。有没有办法只选择与用户具有相同客户端 ID 的那个?

所以我在 SQL 中的意思是 SELECT * (OR WHATEVER) FROM location WHERE client_id = {userdata.client_id}

【问题讨论】:

    标签: symfony entity formbuilder


    【解决方案1】:

    您可以将query_builder 选项传递给您的字段,这将是您喜欢的任何查询。

    比如:

    $this->createFormBuilder($user)
        ->add('locations', 'entity', 
             array('class' =>'PrUserBundle:Location',
                   'property' => 'name',
                   'query_builder' => function(EntityRepository $er) {
                         return $er->createQueryBuilder('u')
                                   ->where(...)
                                   ->(...)
                                   ->orderBy('u.name', 'ASC');
                      })
             )
    

    查看symfony doc了解更多信息

    【讨论】:

    • 非常感谢。我现在就去检查。但是,没有其他可能性吗?我可以通过实体来做到这一点。这样我就可以告诉字段 Locations 它只接受与用户登录时使用相同客户端 ID 的位置?
    • 您是通过实体进行的 - 在query_builder 中,您将标准查询select * from entityTable 更改为您喜欢的任何查询。在这种情况下select * from entityTable where user_id = :user_id
    • :) 抱歉,我的意思是直接在我的用户类中通过注释来完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2015-06-28
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多