NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Symfony Doctrine rozšíření EntityRepository

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

Aktivity
Avatar
solta
Člen
Avatar
solta:1.3.2017 23:12

Ahoj omlouvám se ale nedokážu dát normální název vlákna.

mam následující kód, Article.php je zkrácen na nutné minimum.
V tomto stavu je $article z NewsController.php null, přitom v profileru je vidět, že se dotaz sestaví správně.
Pokud odkomentuji kód tak vše funguje jak ma.

Prosím tedy o pomoc co s tím?

Article.php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ArticleRepository")
 * @ORM\Table(name="Article")
 */
class Article {
...
}

ArticleReposi­tory.php

namespace AppBundle\Repository;


use Doctrine\ORM\EntityRepository;

class ArticleRepository extends EntityRepository
{

    /**
    * @return Article[]
    */

    public function FindAllPublishedOrderByCreateDate(){

        $this->createQueryBuilder('article')
            ->andWhere('article.isPublished = :isPublished')
            ->setParameter('isPublished', true)
            ->orderBy('article.created_date', 'DESC')
            ->getQuery()
            ->execute();
    }
}

NewsController.php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Entity\Article;


class NewsController extends Controller
{

    /**
     * @Route("/novinky/", name="news")
     */
    public function indexAction(Request $request)
    {

        $em = $this->getDoctrine()->getManager();
        $articles = $em->getRepository('AppBundle:Article')->FindAllPublishedOrderByCreateDate();
        /*$articles = $em->getRepository('AppBundle:Article')
            ->createQueryBuilder('article')
            ->andWhere('article.isPublished = :isPublished')
            ->setParameter('isPublished', true)
            ->orderBy('article.created_date', 'DESC')
            ->getQuery()
            ->execute();*/
        return $this->render('news/index.html.twig', [
            'articles' => $articles
        ]);
    }
}
 
Odpovědět
1.3.2017 23:12
Avatar
Odpovídá na solta
Martin Konečný (pavelco1998):1.3.2017 23:21

Ahoj,
pravděpodobně bude chyba v tom, že ti ta metoda ArticleReposi­tory::FindAllPu­blishedOrderBy­CreateDate() nic nevrací pomocí return :)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
1.3.2017 23:21
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
solta
Člen
Avatar
solta:1.3.2017 23:25

Jsem jelito v FindAllPublishe­dOrderByCreate­Date() mi chybí return

 
Nahoru Odpovědět
1.3.2017 23:25
Avatar
solta
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
solta:1.3.2017 23:27

díky napsal jsi to trochu dřív a to nad tím sedím už několik hodin :D

 
Nahoru Odpovědět
1.3.2017 23:27
Avatar
Odpovídá na solta
Martin Konečný (pavelco1998):1.3.2017 23:28

No jo, Doctrine má v sobě hromadu podobných záludností :P

Nahoru Odpovědět
1.3.2017 23:28
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Matúš Petrofčík:2.3.2017 0:14

Skôr by som povedal, že je to jasné zabudnutie slovíčka return, Doctrine za to v tomto prípade nemôže :D

Nahoru Odpovědět
2.3.2017 0:14
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Martin Konečný (pavelco1998):2.3.2017 0:18

Ale jo, autora natolik zalekla svou velikostí a složitostí, až zapomněl na return :(

Nahoru Odpovědět
2.3.2017 0:18
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Nahoru Odpovědět
2.3.2017 0:40
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Neaktivní uživatel:2.3.2017 6:38

Proč nepouživáš místo execute getResult nebo getSingleResult?

Nahoru Odpovědět
2.3.2017 6:38
Neaktivní uživatelský účet
Avatar
solta
Člen
Avatar
Odpovídá na Neaktivní uživatel
solta:2.3.2017 7:12

a jaký je v tom rozdíl ja s tím teprve začínám
getResult jenom volá execute

 
Nahoru Odpovědět
2.3.2017 7:12
Avatar
Neaktivní uživatel:2.3.2017 8:18

getSingleResult vrací jeden výsledek.
getResult vrací více výsledku.

ano je to podobné http://stackoverflow.com/…sing-execute , ale je lepší využivát to co ti nabízí framework než míchat vše dohromady a potom hledát na internetu proč to nefunguje :)

Nahoru Odpovědět
2.3.2017 8:18
Neaktivní uživatelský účet
Avatar
solta
Člen
Avatar
Odpovídá na Neaktivní uživatel
solta:2.3.2017 10:58

ale ja tam potřebuji všechny výsledky a v použití getResult nebo execute nevidím rozdíl

 
Nahoru Odpovědět
2.3.2017 10:58
Avatar
Odpovídá na Neaktivní uživatel
Matúš Petrofčík:2.3.2017 12:42

Prečo si mu dal mínusko? Veď je to úplne na ňom či používa execute alebo getResults, nech si robí čo mu viac vyhovuje. Už aj tvoj odkaz na stackoverflow píše o nasledovnom:

Basically getResult() is alias for execute(array()) you can set as argument hydration mode for example: getResult(Que­ry::HYDRATE_OB­JECT) is execute(array(), Query::HYDRTE_OB­JECT)
Only difference: in execute method you can set query parameters as first argument so you do not have to call setParameter method before...

V tomto prípade použil setParameter() a v execute() už žiadne parametre nepridáva, ale aj tak, prečo to mínusko? Nie je vari lepšie človeka naučiť novej veci (prípade usmerniť) než ho trestať nesúhlasom?

Nahoru Odpovědět
2.3.2017 12:42
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na solta
Matúš Petrofčík:2.3.2017 12:47

Na druhú stranu:

  • ak použiješ getResult(), tak vieš že očakávaš viacero výsledkov.
  • ak použiješ getSingleResul­t(), tak vieš že očakávaš jeden výsledok, ale ak nenájde žiaden alebo viac výsledkov, vyhodí výnimku.
  • ak použiješ getOneOrNullRe­sult(), tak vieš že očakávaš jeden výsledok alebo null.
  • ak použiješ execute(), tak nevieš čo očakávať :) (teda vieš ale nie je to hneď jasné).
  • ... treba si pozrieť dokumentáciu ;)

Medzi execute() a týmy ostatnými je rozdiel v tom, že v execute ešte môžeš pridávať parametre pre query. U tých ostatných ich musíš pridávať pomocou setParameter() pred volaním poslednej funkcie.

Editováno 2.3.2017 12:50
Nahoru Odpovědět
2.3.2017 12:47
obsah kocky = r^2 ... a preto vlak drnká
Avatar
solta
Člen
Avatar
Odpovídá na Matúš Petrofčík
solta:2.3.2017 17:35

děkuji to zní rozumně

 
Nahoru Odpovědět
2.3.2017 17:35
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 15 zpráv z 15.