2012-11-24 27 views
18

Doctrine 2.1'den itibaren CASE WHEN ifadesi destekleniyor ancak üzerinde çok fazla belge yok. Amacım bir fotoğraf bir kullanıcı tarafından favorilere eklendi anlamanın bir boole değeri ayarlamaktır: Doctrine2 varlığındaki "CASE WHEN" koşulunun saklanması

 ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as is_favorited") 
     ->leftJoin("p.favorites", 'f', 'WITH', 'f.owner = :viewer') 
     ->orderBy("p.date_posted", "DESC") 
     ->setParameters(array("owner" => $owner, "viewer" => $viewer)); 

Ama kişiler JMSSerializer tarafından json dönüşüyor çünkü ben VAKA ayarlamak istediğiniz

ZAMAN sonuç olarak bir varlık üzerindeki özellik.

 ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as p.is_favorited") 

Ama unforunately Doktrini böyle görünmüyor: DQL bir varlıktaki özelliklerini oluşturulan ayara bir alternatif var mı

[Syntax Error] line 0, col 65: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got '.'

?

+0

DQL ile sonuç ayarlamak haritalama çalışır mı? – gremo

+0

- 'addSelect ('f.photo NEDİR DEĞİLDİR') 'aynı etkiye sahip değil miydi (ama belki de Doktrini açmadım)? –

+0

Sadece (CASE WHEN f.photo, NULL THEN false ELSE true END) 'de olduğu gibi' 'CASE' 'i kapsüllemeyi denediniz mi? – prodigitalson

cevap

2

Doğrudan sorguda özellik değerini ayarlamanın bir yolu yoktur. Bunun yerine, eşlenmemiş alanı varlığa ekleyebilir ve ardından sonuçlardan geçebilir ve ayarlayabilirsiniz. Bu durumda JMSSerializer bu alanı serileştirir ve üzerine gerekli tip ve diğer meta bilgileri ayarlayabilirsiniz.

0

Bunu deneyebilir misiniz? Eğer seçme açıklamada listelenen FROM tablo bir yok çünkü o şikayetçi gibi geliyor hata itibaren DQL

->addSelect("SUM(CASE WHEN f.photo is NULL THEN 0 ELSE 1 END) as p.is_favorited"); 
+0

Artık bu soruyu başlangıçta yaratmış olan bir kuruluma sahip değilim, ancak bu bir çözüm olsa da bir değer olabilir. Gerçekten çalışıyor mu? – Dandy

-1

birlikte çalışacaktır.

+0

Doğrudan bir depodan sorgular oluştururken, Doctrine otomatik olarak sizin için bunu dolduracağından "from()" ı belirtmeniz gerekmez. E.g., "$ repository-> createQueryBuilder ('p')" – Dandy

-1
Sadece "F" ve tablo adını verir senin

->from() 

satır eklemem gerekiyor

+0

Doğrudan bir depodan sorgular oluştururken, Doctrine otomatik olarak sizin için bunu dolduracağından "from()" ı belirtmeniz gerekmez. – Dandy