Vánoční nadílka Vánoční nadílka
Vánoční akce! Daruj lepší budoucnost blízkým nebo sobě. Až +50 % zdarma na dárkové poukazy. Více informací
Avatar
Andree Pyro
Redaktor
Avatar
Andree Pyro:20. července 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. července 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. července 13:28

nebude stačit něco jako

findAll()->limit(5) ?
 
Nahoru Odpovědět 20. července 13:28
Avatar
Zdeněk Srb
Člen
Avatar
Zdeněk Srb:20. července 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. července 15:39
Avatar
Andree Pyro
Redaktor
Avatar
Odpovídá na Zdeněk Srb
Andree Pyro:21. července 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. července 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. července 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. července 9:19
Nahoru Odpovědět 21. července 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.