Diskuze: Vyhledání pomocí DQL dotazu. Doctrine 2
Člen
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ahoj,
mám takový pocit, že v DQL nepůjde JOINovat entity, které spolu nemají
žádný vztah, ale možná by mohlo fungovat něco jako
return $this->em->createQuery('
SELECT PARTIAL user.{id,username,route}, PARTIAL settings.{id, description}, PARTIAL article.{id, title, description}, PARTIAL category.{id, name, description}
FROM App\Model\Entities\User user
INNER JOIN user.settings settings
JOIN App\Model\Entities\Article article WITH user.username = article.title
JOIN App\Model\Entities\Category category WITH user.username = category.name
WHERE user.username = %:param%
')
->setParameter('param', $text)
->setMaxResults(5)
->getResult();
Entity, které k sobě nemají relaci, lze spojovat pomocí operátoru WITH,
viz http://docs.doctrine-project.org/…anguage.html (můžeš to
najít pomocí řetězce "Joins between entities without associations were not
possible ...").
Ovšem zde je problém, že by se jméno usera muselo přesně shodovat s
názvem článku / kategorie, což není úplně to, co chceš.
Nevím, zda v DQL vůbec půjde to, co chceš, určitě by ale mělo jít to
vyhledat v čistém SQL a pokud potřebuješ entity, tak je pak namapovat
ručně (zábavná práce).
Ahoj, původně jsem se chtěl zeptat v samostatném vlákně, ale když už
je to tady tak nakouslí ...
S tím %, nevíš jak se to dělá v DQL ? Když to napíšu do toho dotazu, tak
dostanu
[Syntax Error] line 0, col 222: Error: Expected Literal, got '%'
ale když to dám z tomu parametru.
->setParameter('category', %$parameter%)
tak mi to nikdy nic nenajde kategorii 'test', když zadám 't'
->setParameter('category', "%{$parameter}%")
Jsi si jistý, že je to správně? U mého vyhledávání to nefunguje.:/
Co konkrétně jestli je správně?
Ahoj, nevím, jestli to píšu nějak špatně, ale mě to
->setParameter('category', "%{$parameter}%")
nikdy nic nenajde, Ani když mám v databázi 'test' a zadám jako parametr něco z toho slova, třeba ('e', 't','test'). Ale když tam dám jen
->setParameter('category', "$parameter")
a zadám 'test', tak mi to vyhledá
A jak vypadá přesně ten tvůj dotaz?
return $this->em->createQuery('
SELECT PARTIAL category.{id, route, description, name}
FROM App\Model\Entities\Category category
WHERE category.name = :name
')
->setParameter('name', "%{$searchText}%")
->setMaxResults($limit)
->getResult();
když tam mám ty procenta, tak mi to nenajde kategorii s názvem "category", i když zadám její celý název. Když tam ty procenta nedám a zadám celý název, tak se kategorie najde.
Dej tam
WHERE category.name LIKE :name
a mělo by to být ok
Dík. Musím říct, že na to jsem úplně zapomněl
Zobrazeno 11 zpráv z 11.