Od wersji Doctrine 2.1 instrukcja CASE WHEN jest obsługiwana, ale nie ma na niej zbyt wiele dokumentacji. Moim celem jest, aby ustawić wartość logiczną, aby stwierdzić, czy zdjęcie zostało ulubionych przez użytkownika:Przechowywanie warunku "CASE WHEN" w jednostce Doctrine2
->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));
Ale ponieważ moje podmioty są przekształcone json przez JMSSerializer chciałbym ustawić w przypadku, gdy wynik jako własność na podmiocie.
->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as p.is_favorited")
Ale unforunately Doctrine nie wydaje się słuszne:
[Syntax Error] line 0, col 65: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got '.'
Czy istnieje alternatywa do ustawiania DQL stworzony właściwości na podmiot?
powoduje ustawienie pracy mapowania z DQL? – gremo
Czy '-> addSelect ('f.photo IS NOT NULL')' nie wywoła takiego samego efektu (ale być może nie potknie się o Doctrine)? –
Czy próbowałeś po prostu enkapsulacji 'CASE' w'() 'like' (CASE WHEN f.photo jest NULL THEN false ELSE true END) jak is_favorited'? – prodigitalson