2012-02-15 49 views
0

我試圖創建一個簡單的形式奏鳴曲束。我有一個問題要加載數據的實體類型字段。我知道這是工作:Symfony2的QueryBuilder的聯接不工作

$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,我想表明它的名字,這在relationed表。我嘗試在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' 
));     

任何人都知道如何做到這一點?

謝謝。

+0

請加上你收到的錯誤。 – 2012-02-15 16:45:06

+0

我不明白爲什麼使用類似這樣的東西,而不是爲了使自己的舊的更快的sql字符串 – dynamic 2012-02-15 16:45:53

+0

我得到這個錯誤試圖獲取名稱屬性: 既不屬性「nom」也不是方法「getName()」或方法「isName()」存在於類「MyBundle \實體\富 名稱是酒吧實體屬性,看來我只能得到一個從Foo實體... – carlosbuz 2012-02-16 13:12:36

回答

0

你應該讓你使用的是實體__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 
} 

主義將延遲加載在聯想(不是一個問題,如果您正在使用的標籤的低/單數工作)。 ..我用這種方法有效地做了你所描述的

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

嗨皮特,感謝信息,但它只是爲Foo實體工作,我想從酒吧實體選擇數據。 – carlosbuz 2012-02-16 10:01:16

+0

如果你已經在正確的映射定義你們的關係。在我的編輯顯示你的'__toString()'方法可能看起來 – 2012-02-16 14:45:24