IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Symfony - Limit na počet nalezených objektů v databázi

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Andree Pyro
Tvůrce
Avatar
Andree Pyro:20.7.2018 12:20

Mám webovou stránku, kam může uživatel přidávat články, napsanou v Symfony. Rád bych omezil limit vykreslení na 5 článků. Získávání člínku upravuji přímo v ArticleRepository. Nedaří se mi z databáze vrátit pouze 5 posledních článků. Funkce

findAll()

vrací všechny a nevím, jak ji upravit.

Zkusil jsem: Googlit, googlit a googlit. Několik možností jsem našel, bohužel ani jedna se mi nepodařila implementovat tak, aby fungovala.

Chci docílit: Získání pouze několika posledních článků z databáze. Vykreslení na 5 článků bych mohl lehce upravit až při jejich vykreslení, ale pak bych zbytečně žádal databázi o všechny články na místo jen potřebných 5.

Díky za pomoc :)

Odpovědět
20.7.2018 12:20
Boj sa tých, ktorí sú ticho. Oni sú totiž tí jediní, ktorí skutočne myslia.
Avatar
dez1nd
Člen
Avatar
Odpovídá na Andree Pyro
dez1nd:20.7.2018 13:28

nebude stačit něco jako

findAll()->limit(5) ?
 
Nahoru Odpovědět
20.7.2018 13:28
Avatar
Zdeněk Srb
Člen
Avatar
Zdeněk Srb:20.7.2018 15:39

nebo můžeš použít kompletně vlastní metodu, ve které si pomocí DQL nebo SQL omezíš počet např.:

public function findAllGreaterThanPrice($price): array
{
    $entityManager = $this->getEntityManager();

    $query = $entityManager->createQuery(
        'SELECT p
        FROM App\Entity\Product p
        WHERE p.price > :price
        ORDER BY p.price ASC'
    )->setParameter('price', 1000);

    // returns an array of Product objects
    return $query->execute();
}
 
Nahoru Odpovědět
20.7.2018 15:39
Avatar
Andree Pyro
Tvůrce
Avatar
Odpovídá na Zdeněk Srb
Andree Pyro:21.7.2018 9:06

První jsem zkusil

findAll()->limit(5)

, což úspěšně nefungovalo s chybou Call to a member function limit() on array

Dále jsem zkusil kód od Zdeňka, který se mi ale nejspíš nepodařilo správně implementovat, protože mi Symfony pořád házelo chybu, že můj article nemůže nikde najít.

Funkční řešení jsem nakonec našel přímo v dokumentaci

return $this->createQueryBuilder('a')
                        ->orderBy('a.id', 'ASC')
                        ->setMaxResults(3)
                        ->getQuery()
                        ->getResult();

a funguje přesně, jak má :D

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
21.7.2018 9:06
Boj sa tých, ktorí sú ticho. Oni sú totiž tí jediní, ktorí skutočne myslia.
Avatar
Odpovídá na Andree Pyro
Patrik Valkovič:21.7.2018 9:18

A co Article::orderBy('id')->take(5)->get()? Nevím, vycházím jenom z toho co se používá v Laravelu.

Editováno 21.7.2018 9:19
Nahoru Odpovědět
21.7.2018 9:18
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.