C# týden C# týden
Pořádné programy s pořádnou klávesnicí zdarma. Více zde
Pouze tento týden sleva až 80 % na C# .NET
Avatar
Andree Pyro
Redaktor
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  +1 20.7.2018 15:39
Avatar
Andree Pyro
Redaktor
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
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Andree Pyro
patrik.valkovic: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.