2011-12-13 34 views

cevap

4

İşte maddesi ile dizinin manuel enjeksiyon kullanarak, QueryBuilder kullanarak bir çözüm. Böyle bir şey yapabilirsin.

$qb = $entityManager->createQueryBuilder(); 
$qb->from($repository->getClassName(), 'a', 'a.id'); 
$qb->select(a); 

$result = new ArrayCollection($qb->getQuery()->getResult()); 

Sonuç olarak, dizi koleksiyonu düzgün şekilde dizinlenmiş öğeler içerecektir.

+0

kullanın. Bunun çok eski bir yanıt olduğunu anlıyorum, ama ben Bunun WHERE yan tümcesi olmayan sorgularda işe yaramayacağını belirtmek isterim. – rpkamp

-1

Bu mümkün, sorgu oluşturucuyu kullanarak. Küçük bir örnek, t.someField ile endekslemek istediğimizi varsayalım. Üçüncü bağımsız değişkeni yöntemden izleyin.

<?php 
$query = $em->createQueryBuilder() 
    ->select('t.somefield', 't.someOtherField') 
    ->setFrom('Entity\Table', 't', 't.someField') 
    ->getQuery() 
$results = $query->getArrayResult(); 

//your result will look something like: 
$results['somefieldvalue'] = array(array('somefield' => 'value', 'someOtherField' => 'test')); 
?> 

Bu, Doktrin 2.1'de en azından çalışmalıdır. Doctrine 2.0'da henüz desteklenmiyor. Doctrine 2.0'da sadece DQL ile belirtildiğinde desteklenir.

(do you querybuilder statement) 
$q = $q->getQuery()->setDQL(str_replace('WHERE', 'INDEX BY yourIndexValue WHERE', $q->getDQL())); 

Bu benim için iş gibi görünüyor ...

+2

Doctrine 2.1.0-DEV ile, $ qb-> add ('from', 'Entity \ Table t INDEX BY t.id'); ' – Maxence

6

bir güncelleştirme için -

40

2.2 ile başlayarak, şimdi INDEX BY ifadesini içerden ekleyebilirsiniz. Eğer fıkra dan a, ekliyorsanız zaten Değiştirmek istediğiniz fıkra bir varsa

$qb->from($class, $alias, $indexBy); 

, o zaman ile değiştirebilirsiniz:

$qb->add('from', new Expr\From($class, $alias, $indexBy), false); 

eklemek için açık bir çekme isteği var Deponun createQueryBuilder işlevi de, bu yüzden bu yakında eklenecektir umarım.

+6

Doğru cevap bu olmalı. – imclickingmaniac

+0

Hey, 2015'ten yazıyorum ve henüz yok :-( – zerkms

+0

Reddedildi ... https://github.com/doctrine/doctrine2/pull/592 – cmenning

0

Ayrıca, yabancı bir anahtarın varsayılan bir INDEX BY değerini de kullanabilirsiniz. doğrudan eşlemenizde "yourIndexValue_id": Eğer yabancı anahtarın kendisi sütunun adını kullanmak zorunda olduğu

/** 
* @ORM\OneToMany(targetEntity="Bar", mappedBy="foo", indexBy="bar_id") 
*/ 
protected $bars; 

Ne yazık ki belgelendirilmesi görünmüyor.

Working with Indexed Associations

2

uygun sözdizimi ve en basit olacaktır: Bu indeks Varlık adı alanına göre sonuç olur

$enityManager->getRepository('AppBundle:Entity')->createQueryBuilder('entity', 'entity.name')->getQuery()->getResult(); 

.

İlgili konular