DQL

2013-03-06 12 views
8

içinde hesaplanan bir değer tarafından sipariş etme Sorgulamamın sonuçlarını, bir mülkteki orijinal varlığımla eşleşip eşleşmediklerini sipariş etmeye çalışıyorum. Aşağıdaki sorgu ile mySQL kolayca yapabilirsiniz:DQL

SELECT * FROM table 
ORDER BY prop = 'value' DESC; 

Ancak Doctrine'de, şu çalıştığınızda:

// $qb is an instance of query builder 
$qb->select('e') 
    ->from('Entity', 'e') 
    ->orderBy('e.prop = :value', 'DESC') 
    ->setParameter('value', 'value'); 
// grab values 

Bir Doktrin sözdizimi hatası, 'dizesinin sonuna' olsun. Özel bir işlev oluşturmaya baktım ama bu overkill gibi görünüyor. Doktrin için oldukça yeni oldum, bunu yapmanın daha iyi bir yolu var mı?

cevap

22

Doktrin ORM 2.2 olduğundan, bir CASE ifade ile, bu durumda HIDDEN anahtar kelimeyi kullanmak ve ek alanları seçebilirsiniz:

SELECT 
    e, 
    CASE WHEN e.prop = :value THEN 1 ELSE 0 END AS HIDDEN sortCondition 
FROM 
    Entity e 
ORDER BY 
    sortCondition DESC 
+0

Bu mükemmel çalıştı! Teşekkürler! – SnailCoil

11

Bir süre struggeled olarak bu sorgu kullanarak php nasıl oluşturulacağını anlamaya sözdizimi işte işte burada neyle geldim:

$value = 'my-value';  
$qb->select('e') 
    ->from('Entity', 'e') 
    ->addSelect('CASE WHEN e.prop = :value THEN 1 ELSE 0 END AS HIDDEN sortCondition') 
    ->setParameter('value', $value) 
    ->addOrderBy('sortCondition', 'DESC'); 
İlgili konular