【问题标题】:Symfony2 querybuilder join not working in Sonata bundle for joinSymfony 查询构建器连接在 Sonata 捆绑包中不起作用
【发布时间】:2012-02-15 16:33:28
【问题描述】:

我正在尝试使用奏鸣曲捆绑创建一个简单的表单。我在尝试加载数据实体类型字段时遇到一个问题。我知道这是有效的:

$formMapper->add( 'foo', 'entity', array(
    'class'         => 'myVendorMyBundleBundle:Foo',
    'property'      => 'id',
    'query_builder' => function(FooRepository $er) {
        return $er->createQueryBuilder('qb')
        ->add( 'select', 'f' )
        ->add( 'from', 'myVendorMyBundleBundle:Foo f' )
    },
'label'         => 'foo'
) );                

问题是我不想显示实体 id,我想显示它的名称,它位于相关表中。我尝试在 createQueryBuilder 方法中使用 join 语句,但我没有让它工作:

$formMapper->add( 'foo', 'entity', array(
    'class'         => 'myVendorMyBundleBundle:Foo',
    'property'      => 'b.name',
    'query_builder' => function(FooRepository $er) {
        return $er->createQueryBuilder('qb')
        ->add( 'select', 'f' )
        ->add( 'from', 'myVendorMyBundleBundle:Foo f' )
        ->add( 'join', 'myVendorMyBundleBundle:Bar b' )
    },
'label'         => 'foo'
) );                

我该怎么做?

【问题讨论】:

  • 请添加您收到的错误。
  • 我不明白为什么要使用这样的东西来自己制作一个普通的更快的 sql 字符串
  • 我在尝试获取名称属性时遇到此错误:“MyBundle\Entity\Foo 名称是一个栏”中的属性“nom”或方法“getName()”或方法“isName()”都不存在实体属性。看来我只能从 foo 实体获取信息...

标签: php symfony doctrine-orm


【解决方案1】:

你应该在你正在使用的实体上创建一个__toString() 方法,Symfony 会自动使用它作为标签。

编辑: 在您的 myVendorMyBundleBundle:Foo 类中,您应该定义一个变量 $bar

<?php

// ../app/src/myVendor/MyBundleBundle/Entity/Foo.php

public function __toString()
{
    // If relationship is many to one or one to one
    return $this->bar->getSomeProperty();

    //If relationship is one to many or many to many
    $return_var = '';
    foreach($this->bars as $bar)
    {
        $return_var .= $bar->getSomeProperty() . ' ';
    }

    return $return_var
}

Doctrine 将在关联中延迟加载(如果您使用少量/奇异数量的标签,这不是问题)...我已有效地使用此方法来完成您所描述的操作

<?php
$b->add('foo', 'entity', array(
     'class' => 'myVendorMyBundleBundle:Foo',
));       

【讨论】:

  • 嗨皮特,谢谢,但它只适用于 foo 实体,我想从 bar 实体中选择数据。
  • 如果您在映射中正确定义了您的关系。您的 __toString() 方法可能看起来像我的编辑中显示的内容
猜你喜欢
  • 1970-01-01
  • 2018-05-15
  • 2021-10-19
  • 2018-12-31
  • 2013-06-09
  • 1970-01-01
  • 2017-02-04
  • 2019-12-13
  • 1970-01-01
相关资源
最近更新 更多