ORM query na samostatnu tabulku
- romiix.org
- Člen | 343
Normálne cez model ako k ostatným tabuľkám. Daj sem napr. kus kódu ktorý by si chcel použiť a neide ti, alebo niečo podobné. Takto sa ťažko radí.
- d4ncul
- Člen | 41
Napr. tymto sposobom ziskavam data z repozitarov konkretnych modelov. V uvedenom priklade ziskavam poslednych 5 platieb. Mam napr. model Company a k nemu prisluchajuci repozitar. Potreboval by som ale k zoznamu miest pristupovat globalne. Vsetky moje presentery dedia od BasePresenter. A tu je kamen urazu, ako z neho volat metodu modelu, pomocou ktorej ziskam zoznam miest? DAKUJEM
public function getLatestPayments($company_id)
{
$query = $this->getEntityManager()->createQueryBuilder();
$query->select('p')
->from('Payment', 'p')
->where('p.company = :company_id')->setParameter('company_id', $company_id)
->orderBy('p.pay_date', 'DESC')
->setMaxResults(5);
return $query->getQuery()->getResult();
}
- romiix.org
- Člen | 343
Vôbec si nie som istý, či odpovedám k veci, ale skúsim to.
Model CityModel.php
:
<?php
class CityModel extends Nette\Object
{
/** @var Nette\Database\Connection */
protected $connection;
/** @var string */
public $table;
public function __construct(Nette\Database\Connection $db)
{
$this->connection = $db;
}
/**
* @return Nette\Database\Table\Selection
*/
public function getTable()
{
return $this->connection->table($this->table);
}
public function getAll()
{
return $this->getTable()->fetchPairs("id_city", "name");
}
}
Konfigurácia config.neon
:
common:
services:
cityModel:
class: CityModel
setup:
- $table(city)
Túto službu následne injectúť a použiť:
$this->cityModel->getAll();
- Tomáš Jablonický
- Člen | 115
@d4ncul:
Uděl si repository, kde budou tyto kusy kodu. Namapuj to do entity a v nejvyšším BasePresenteru jen vstříkni EntityManager a pak už jen lehce v každém presenteru můžeš udělat toto:
BasePresenter
<?php
abstract BasePresenter extends Presenter
{
/** @var EntityManager $em */
protected $em;
public function injectEntityManager(EntityManager $em)
{
$this->em = $em;
}
}
?>
NajkyPresenter
<?php
class NejakyPresenter extends BasePresenter
{
public function actionDefault()
{
...
$data = $this->em->getRepository('Entita')
->getLatestPayments($this->company_id);
...
}
}
?>