Doctrine a nárust SQL dotazů
- ondrej256
- Člen | 187
Zdravím,
dneska jsem si řekl, že vyzkouším konečně Kdyby/Doctrine.
Udělal jsem si „Inzerci“, která má 2 tabulky: Inzerát (advertisement) a značka (Mark).
Z DB jsem si vytáhl, všechny záznamy z tabulky Inzerát a vypsal:
{block content}
{foreach $advertisements as $advertisement}
{$advertisement->getMark()->getName()}
{/foreach}
{/block}
Zjistil jsem však, že pro každou iteraci se posílá jeden SQL dotaz na
značku (mark).
Používal jsem zatím jen YetORM a ta to měla vyřešeno, takže se poslal
jeden dotaz na inzeráty a druhý na značky.
Jak se to v Doctrine řeší? Věřím, že to má Doctrina ošetřeno a jen s tím špatně pracuju.
Presenter
$this-template->advertisements = $this->advertisementRepository->findBy([]);
AdvertisementRepository
<?php
namespace App\Model;
use App\Model\Entity\Advertisement;
use Kdyby\Doctrine\EntityRepository;
class AdvertisementRepository extends EntityRepository
{}
Předem děkuju za rady
- David Matějka
- Moderator | 6445
pro „has one“ asociace v pripade, ze vis, ze ji budes vytahovat vzdy,
tak muzes pouzit fetch="EAGER"
nebo si napis vlastni DQL..
automaticka optimalizace 1+n dotazu je v doctrine slozita z duvodu pritomnosti identity mapy.
- Marek Bartoš
- Nette Blogger | 1274
Sice už je to starší příspěvek, ale mohlo by zaujmout toto. Konkrétně druhý bod. Joiny použiješ jen u oneToOne, jinak se tahá zbytečně moc dat a v případě orm to vede i k pracnému převádění na entity.