Nextras\ORM – ORM nad Nextras\Dbal
- hrach
- Člen | 1838
@pavelmlejnek
musis si to nejak upravit:
- nad modelem definujes repository jak jsou
- je treba upravit resolvovani classy mapperu. Bud ty mappery rucne natriskas do konfigu s vlastnimi tridami, nebo si podedis a upravis extension.
- jmena entit se generuji v repository, tj. doporucuji nejaky baseRepository, a tam pretizit statickou metodu getEntityClassNames
- pavelmlejnek
- Člen | 16
@hrach
Tušil jsem že to jinak nepůjde, ale radši jsem se zeptal :)
Nedalo by se nastavení těch cest do namespace zabudovat do containeru, aby se to dalo nastavit v config.neon?
něco jako
orm:
repositories:
users:
mapper: App\FrontendModule\Model\Orm\Mappers\UsersMapper
entities:
- App\FrontendModule\Model\Orm\Entities\UserEntity
popřípadě nějaké obecné nastavení cest v Namespace
orm:
mapper:
mapping: App\FrontendModule\Model\Orm\Mappers\*Mapper
Nezkoumal jsem to celé nijak do hloubky, takže nevím jestli je to možné, je to jen takový nápad ;)
Díky!
- Matey
- Člen | 142
ahoj, mám v ORM nejakú možnosť vylepšiť niečo takéto? ( je to vôbec potrebné? :) poraďte prosím )
HomeRepository
/**
* @param array $array id => ord
*/
public function position($array) {
foreach ($array as $id => $ord) {
$entity = $this->getById($id);
$entity->ord = $ord;
$this->persist($entity);
}
$this->flush();
}
zoraďujem takto položky z db, napr tabuľka home(id, name, ord), ak mám 5 záznamov tak toto vypluje 5× SELECT 5× UPDATE, šlo by to pohodlne zlúčiť? alebo sa takým niečim nemám zaoberať? :) ďakujem
- hrach
- Člen | 1838
@Matey
doporucuji logiku presunout z repository do service.
public function position($array)
{
$all = $this->orm->products->findById(array_keys($array));
foreach ($all as $entity) {
$entity->ord = $array[$entity->id];
$this->orm->products->persist($entity);
}
$this->orm->flush();
}
- Peter Láng
- Člen | 3
Můžu nějak pěkně nadefinovat entitu User, která bude vracet (mimojiné) kolekci User-ů? Například pro friend – friend vztahy.
V doctrine by to bylo takhle – http://doctrine-orm.readthedocs.org/…mapping.html#…
Editoval Peter Láng (6. 10. 2014 16:20)
- elektricman
- Člen | 29
Mám asi další bug :( (a nebo to jen blbě používám)
Mám skupinu (group) a v ní nějaký účastníky (particpant), kteří
jsou buď zrušení nebo ne..
Ve skupině 184 mám dva účastníky. Na začátku jsou oba ve stavu canceled
⇒ false.
Dál viz zdroják:
/** @var Group $group */
$group = $this->groups->getById(184);
dump($group->participants->get()->findBy(['canceled'=>false])->fetchAll()); // Vypíše správně oba
dump($group->participants->get()->findBy(['canceled'=>true])->fetchAll()); // Vypíše správně prázdný výsledek
$participant = $this->participants->getById(1519);
$participant->canceled = true; // změnim jednoho z těch učastníků na canceled = true
$this->participants->persistAndFlush($participant);
dump($group->participants->get()->findBy(['canceled'=>false])->fetchAll()); // Vypíše špatně (zase jsou tam oba)
dump($group->participants->get()->findBy(['canceled'=>true])->fetchAll()); // Vypíše špatně (zase je prázdný výsledek)
Když dám f5 (nový request) už je to všechno správně..
Editoval elektricman (7. 10. 2014 18:29)
- hrach
- Člen | 1838
@elektricman aj, to jsem netusil, ze to ma takove dalekosahle dusledky, je to toto issue: https://github.com/…rm/issues/27
- elektricman
- Člen | 29
Ajo …
No já na to přišel až při ajaxu..
v actionDetail načtu skupinu, v handleCanceled měním canceled u účastníka a volám redrawControl, a v renderDetail pak předávám šabloně – do snippetu … S klasickým přesměrováním na this v handle to frí jak má. při Ajaxu a posílání snippetu nee :(
- vitkutny
- Člen | 73
Mám entitu page ktereá má vazbu na menu a chtěl bych vyfiltrovat stránky
podle nějakých sloupečků v entitě menu.
Do pageRepository findBy předávám následující pole, ale nefunguje
rekurzivně
array (1)
menu => array (2)
hidden => "1"
uid => "abc" (3)
Dostávám dotaz
"SELECT DISTINCT `page`.* FROM `page` WHERE (`page`.`menu_id` IN ((`hidden` = '1') AND (`uid` = 'abc')))"
Chci vyfiltrovan stránky které mají vazbu na menu které má hidden = 1 a
uid = abc
Jak na to? Děkuji.
- Peter Láng
- Člen | 3
hrach napsal(a):
@PeterLáng zalezi jak mas db, pokud klasicky (spojovaci tabulka (user1, user2)), tak nadefinuj m:n vztah na sebe, s tim, ze budes mit dve property.
A nemusím ještě někde něco namapovat? Protože výchozí chování vede k tomu, že v DbStorageReflection.findManyHasManyPrimaryColumns se nikdy nenastaví $targetId, protože $targetTable se vždycky rovná users (protože oba sloupce vedou na users, tzn. vždycky $table === $sourceTable).
- vitkutny
- Člen | 73
@hrach opět mi to nefunguje do hloubky (přímo na entitě page funguje), špatně rozezná název tabulky, dostávám následující chybu:
PDOException #42S02
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'webedit.menu_id' doesn't exist
relace v Page\Entity:
@property Menu\Entity $menu {1:1d Menu\Repository $page primary}
array (1)
"this->menu->parent" => "1"
- Matey
- Člen | 142
@hrach prosím ťa, je v poriadku že pri neúspešnom inserte do db dôjde k zvýšeniu primárneho kľúča(s auto_increment)?
s transakciami som nikdy nerobil okrem Nextrax/ORM takže možno táram
v prípade že je všetko v poriadku dôjde ku COMMITU
v prípade že nastane problém nedôjde ku ROLLBACKU
napríklad pri takomto forme, keď zadávam rovnaký slug a slug je v db nastavený na UNIQUE
protected function createComponentAddCategoryForm() {
$form = new Form;
$form->addText('name', 'Názov kategórie:')
->setRequired();
$form->addSubmit('submit');
$form->onSuccess[] = $this->processAddCategoryForm;
return $form;
}
public function processAddCategoryForm($form, $values) {
$category = new GalleryCategory;
$category->gallery = $this->gallery;
$category->name = $values->name;
$category->slug = \Nette\Utils\Strings::webalize($values->name);
$category->ord = $this->gallery->galleryCategory->count();
try {
$this->orm->galleryCategory->persistAndFlush($category);
$this->flashMessage('Kategória bola pridaná.', 'success');
$this->redirect('this');
} catch (\PDOException $e) {
if ($e->getCode() == 23000) {
$form->addError('Zadaný názov už existuje. Zadaj prosím iný názov.');
}
}
}
- Matey
- Člen | 142
@hrach mám formulár na pridávanie fotiek do galérie, pre $image->ord potrebujem zistiť počet fotiek v galerii, čiže nastaviť poradie fotky, no správa sa to nejak divne
//action
$this->gallery = $this->orm->gallery->getBySlug($slug);
//spracovanie formu
$image = new GalleryImage;
$image->ord = $this->gallery->images->count();
// dostanem Value for App\Model\GalleryImage::$ord property is invalid.
$image->ord = 1; // 1
// ak zadám číslo, všetko je v poriadku
$image->ord = 1; // 1
$image->ord = $this->gallery->images->count(); // 13
// ak zadám číslo a následne prepíšem tak je to v poriadku, ale prečo? netuším
barDump($this->gallery->images->count()); // 13
$image->ord = 1; // 1
// ak dumpnem pred priradením zas dostanem Value for App\Model\GalleryImage::$ord property is invalid. ..wtf? :)
$image->ord = 1; // 1
barDump($this->gallery->images->count()); // 13
// ak dumpnem po priradení všetko je vporiadku
orm mám najnovšie
cache pravidelne mazane
netuším prečo dostávam tento error, keďže hodnota z $this->gallery->images->count() je číslo
edit: poriešil som to takto na priamo
$image->ord = $this->orm->galleryImage->findBy(['category' => $values->category])->count();
Editoval Matey (7. 11. 2014 23:42)
- hrach
- Člen | 1838
@Matey je to proto, ze count() metoda fetchne vsechny zaznamy do
pameti. Pouzij countStored()
.
Jinak pro vysvetleni i ostatnim: ono image je zrejme jiz spojeny s gallery image. Tim padem je v jeho kolekci. Kolekce bude mit predpokladam nastaveno vychozi razeni, tzn. metoda count() zpusobi to, ze se orm zasnazi vracit tuto kolekci serazenou podle ord a selze, protoze image nema natavene poradi.
- prebijak
- Člen | 21
Mám formulář umožňující úpravu informací o týmu a jeho členech (počet členů je dynamický).
$team = $this->teams->getById($id);
$team->name = $form['name']->value;
// foreach ($team->persons as $person) {
// $this->persons->remove($person);
// }
// $this->persons->flush();
$this->teams->persistAndFlush($team);
$members = [];
foreach ($form['persons']->values as $member) {
$firstname = $member['firstname'];
$person = new App\Model\Person;
$person->firstname = $member['firstname'];
$person->lastname = $member['lastname'];
$person->team = $team;
$members[] = $person;
}
$team->persons = $members;
$this->teams->persistAndFlush($team);
Při úpravě ale obdržím chybu, protože orm se snaží vynullovat team_id
u stávajících osob. Pokud nejprve odstraním stávající členy
odkomentováním části kódu výše, insert se stejně snaží vložit
team_id=null
.
Editoval prebijak (8. 11. 2014 15:47)
- lupo112
- Člen | 11
Ahoj, mám 2 drobné problémy na ktoré som narazil:
- Potreboval by som entitu zloziť z 2 tabuliek. Do druhej tabuľky sa ukladajú dáta vytvorené pomocou triggeru prvej tabuľky. To znamená že k tabulke1 potrebujem prijoinovať tabulku2, ale pokiaľ sa bude niečo ukladať, všetko pôjde len do tabulky1.
- Keďže dáta z tabuky2 sú dosť dynamické a po uložení jednej položky v tabulke1 sa môžu zmeniť všetky položky tabulky2, potrebujem nejak vypnúť identity mapu u tejto entity. Neplánuješ implementovať nejaký mechanizmus na definovanie typu identity mapy, respektíve aspoň jej premazanie?
Díky za odpoveď.
- hrach
- Člen | 1838
@prebijak vypada to, ze se to chova spravne. ORM se snazi entity
udrzet v konzistentnim stavu. Pokud tedy person osoby jiz v tymu nemaji byt,
je treba je bud smazat rucne, nebo rucne preradit do jineho tymu. Jinak volani
$team->persons = $members;
je zbytecne, entity jsou uz projeny z
$person->team = $team;
.
@lupo112 ono by to nejak nahackovat slo, zrejme by slo i to zlepsit api, aby to slo dobre nahackovat, ale otazka je, jestli to ma smysl. Neni jednodussi si si udelat mezi temi tabulkami vazby a napri. v tem 1. si udelat virtualni gettery? Vyresilo by se tak vcelku dobre ukladani.
Ohledne refreshe identity mapy – neco takoveho je v planu, ale zatim to neni uplne priorita. Zatim nejsem rozhodnutej jak. PRomazani by mohlo zpusobit dost zavazny problemy, takze jsem spis pro refresh dat v tech entitach. Na druhou stranu, u dlouho bezicich skriptu (react) by se nejaky garbage collector hodil…
- prebijak
- Člen | 21
@hrach tak jsem to zjednodušil, ale stále stejná chyba. Pokud už
tým předtím nějaké členy měl, skončí to chybou
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'team_id' cannot be null
.
Na druhý pokus už jsou odstraněni, takže se vloží v pořádku.
$team = $this->teams->getById($id);
$team->name = $form['name']->value;
foreach ($team->persons as $person) {
$this->persons->remove($person);
}
$this->persons->flush();
$this->teams->persistAndFlush($team);
foreach ($form['persons']->values as $member) {
$person = new App\Model\Person;
$person->firstname = $member['firstname'];
$person->lastname = $member['lastname'];
$person->team = $team;
$this->persons->persist($person);
}
$this->persons->flush();
- Hanz25
- Člen | 38
Ahoj, nefunguje mi více podmínek pro řazení. Nejsem si jist, zda to používám správně, ale podle toho, co jsem viděl ve zdrojáku, tak by to mělo být ok. Požadavek na repozitář
$this->findBy(['this->user->active' => 1])
->orderBy(["webgroup" => ICollection::ASC, "this->user->age" => ICollection::ASC])->fetchAll();
vygeneruje dotaz do dtb
SELECT DISTINCT `web_userinfo`.*
FROM `web_userinfo`
LEFT JOIN `users` AS `user_id` ON `web_userinfo`.`user_id` = `user_id`.`id`
WHERE (.`user_id`.`active` = 1)
ORDER BY .`user_id`.`age`
ten druhý order, který chci, tam prostě nechce…
Jinak NextrasORM je super věc. Ovšem, čím déle to používám, tím více mi chybí pokročilejší možnosti dotazů, například OR,<,>,!= apod.
Bylo by super, mít možnost si, v případě potřeby, dopsat do krásného API svoje vlastní WHERE nebo ORDER… ale možná toho chci přespříliš :)
- hrach
- Člen | 1838
Díky moc za feedback!
- order: https://github.com/…rm/issues/22, docasnym resenim jedine proxy do mapperu.
- podminky pro „<,>,!=“ fungují →
findBy(['active!=' => 1])
, etc. OR ne a asi ani neplanuju. - nad zlepsenim api pro rozsiritelnost se jeste zamyslim! Diky :-)
- Hanz25
- Člen | 38
Tak na to order jsem přišel. Ty tam podporu pro multiple order máš, ty funkce orderBy jsou na array připraveny, proto mi to moc nešlo do hlavy.
CollectionMapper.php line 72
public function orderBy($column, $direction = ICollection::ASC)
{
$this->release();
$column = $this->getParser()->parse($column, NULL, $this->builder);
/* --> */$this->builder->setOrder([], []);
$this->builder->addOrder($column . ($direction === ICollection::DESC ? ' DESC' : ''));
return $this;
}
Možná hloupý dotaz, protože neznám všechny souvislosti a použití orderBy, ovšem jestli jsem to dobře pochopil, tak při přidávání podmínky, mažeš všechny předchozí. Když to zakomentuju, můžu se někde jinde potkat s chybou?
- prebijak
- Člen | 21
Je možné aby count fungoval nějak šetrněji? Už při středně velké tabulce (~ 100 000 položek) si následující kód ukrojí přes 200 MB paměti.
$allMessages = $this->messages->findAll()->orderBy(['timestamp' => 'DESC']);
dump($allMessages->count());
$this->template->messages = $allMessages->limitBy(50);
Problémem je hlavně první vygenerovaný dotaz, jehož výsledek mě vůbec
nezajímá, stačil by select count(*)
.
SELECT `message`.*
FROM `message`
ORDER BY `message`.`timestamp` DESC
SELECT `message`.*
FROM `message`
ORDER BY `message`.`timestamp` DESC
LIMIT 50
Jedu na nejnovější verzi nextras/orm dev-master b40cde0
- hrach
- Člen | 1838
Nad timto byla velka diskuze. Honza Tvrdik byl zastance toho, ze by se dana metoda mela tez prejmenovat, aby to bylo zrejme. Nakonec jsem ji ponechal, protoze countable interface zrovna ma tento nazev metody a
count($allMessages);
by se melo chovat stejne, jako kdyby to bylo pole, tzn. ty polozky tam musim byt.
- Hanz25
- Člen | 38
Daly by se nějak zjišťovat data z vazební tabulky pro m:n vztahy? Když bych si chtěl ukládat doplňující info k vazbě…
Řeším teď systém soukromých zpráv, kdy jedna zpráva může mít více příjemců, což je v pohodě uživatelé:zprávy ⇒ m:n, ovšem chci vědět, zda každý z uživatelů zprávu přečetl.
Nechci mít další SQL dotaz a novou tabulku, když ta vazební je na tento problém jak dělaná. Taktéž by to šlo dvěma 1:n vazbami, ale to se mi zdá nepraktické.
Editoval Hanz25 (15. 1. 2015 18:11)
- Matey
- Člen | 142
zdravím, @hrach prosím ťa čo je nové v orm a nie je to ešte v testoch/tvojom orm-demo?
mám composer
"require": {
"nextras/nette-framework": "~2.2.0",
"nette/database": "~2.3@dev",
"nextras/orm": "@dev"
}
spravil som zmeny podľa fixes for the latest ORM
a všetko bolo v poriadku až kým som dnes nedal composer update.., nepomôže mi ani keď sa vrátim na „nextras/orm“: „1.0.0-beta5“ a vrátim zmeny
dostávam:
Service ‚orm.mappers.gallery‘: Service of type Nette\Database\Context needed
by Nextras\Orm\Mapper\Nette\NetteMapper::__construct() not found. Did you
register it in configuration file?
Nette\Database\Context je predsa defaultne zaregistrovaná služba nie?
- Matey
- Člen | 142
@hrach tak som to skúsil s čistým nette-sandboxom
composer:
"nextras/nette-framework": "~2.2.0",
"nextras/orm": "@dev",
"nette/database": "~2.3@dev"
config:
php:
date.timezone: Europe/Prague
nette:
application:
errorPresenter: Error
mapping:
*: App\*Module\Presenters\*Presenter
session:
expiration: 14 days
database:
dsn: 'mysql:%dbhost%;dbname=%dbname%'
user: %dbuser%
password: %dbpass%
options:
lazy: yes
services:
- App\Model\UserManager
router: App\RouterFactory::createRouter
dostanem:
Nette\DI\ServiceCreationException
Service ‚18_App_Model_UserManager‘: Service of type Nette\Database\Context needed by App\Model\UserManager::__construct() not found. Did you register it in configuration file?
skúsil som rôzne kombinácie.. a problém je asi v „nette/database“: "~2.3@dev", podla githubu boli nejaké zmeny v nette/database – master, nvm či to mohli spôsobiť tie..
bez nej mi ten sandbox nabehne (teda s nette/database v2.2.3)
nejaká rada ako znovu rozbehnúť projekt? ďakujem
edit1: ešte dodám, že ten projekt mám 2x – dev a production, production beží normalne keďže som tam nedal update
edit2:
"require": {
"nette/nette": "@dev",
"nextras/orm": "@dev",
},
"minimum-stability": "dev"
a všetko je vporiadku.. takže niekde tam dochádza ku chybe – zjavne pre pripravovane nete 2.3
Editoval Matey (25. 1. 2015 12:11)
- hrach
- Člen | 1838
@Matey je to slozitejsi, nez jsem myslel:
- pozmenena database extension nove nebere konfiguraci pod nette klicem, je treba ji presunout pod database (tj. vyjmout z nette klice, dat o uroven vis).
- bohuzel, nova extension vyzaduje nette/di 2.3
- a to bohuzel vyzadaju skoro vsechny ostatni veci z 2.3.
Tak resenum se je bud locknout na commit (pro ted asi nejjednodussi vec). A ja pohnu s vyvojem nextras/dbal, abych mohl nahradit nette database.
- Matey
- Člen | 142
@hrach dik že si sa na to pozrel.. nj, došlo mi keď som začal pozerať čo je nove v nette master vetve.. j tú konfiguráciu som presunul vyššie aby sa mi to rozbehlo, tých pár dní do vydania nette 2.3 už vydržím aj s dev :)
edit: tak teda DEPENDENCIES!!! lock with the latest reasonable nette/database commit
Editoval Matey (26. 1. 2015 11:02)
- Hanz25
- Člen | 38
Ahoj,
byla by nějaká možnost řadit pomocí field?
Jak řešíš překlady?
Dá se nějaká podmínka nastavit přímo pro všechny dotazy na repozitář, nebo collection pro danou entitu? Myslím tím, že bych si nastavil něco jako $comments->findBy([„allowed“ ⇒ 1]) a už bych na to nemusel myslet a při jakémkoliv získání komentářů, bych dostal jen ty povolené. Protože jinak to musím psát úplně všude. V jediné výjimce (administrace) by se zobrazovaly i nepovolené komentáře.
- hrach
- Člen | 1838
@Matey sorry, ten commit byla chyba, zitra odstranim. Ten lock ma byt jen pro dev depencencies, aby se to dobre buildovalo, lock na konkretni commit/spravna konfigurace ndb bude pak tvoje zodpovednost.
@Hanz25
- field – jedine v mapper vrstve
- preklady – neresim, respektive bych resil uplne stejne jako vsechno jine, co tabulka, to patricne entity. pokud nejaka entita ma preklady v jine entite, muzes nadefinovat gettery, ktery jsou treba zavisly na nejaky sluzbe, ktera ti rekne, co je current jazyk.
- ano i ne – findAll() nad mapperem by mela vracet cely „vesmir“, takze pokdu bys chtel dostat i neschvalene komentare, tak by to nefungovalo. Obecne doporucuji postup, ktery jsem prezentoval na posledni sobote a je i v orm demu. Tj. mit dve property a iterovat nad tou, kterou chces. Podle pojmenovani pak muzes urcit i to, ktera je vychozi – tj. comments a commentsAll, vs. comments a commentsAllowed.
- Matey
- Člen | 142
@hrach nazdar, odkedy používam nette/*vymenované všetky balíčky* @dev a nextras/orm @dev tak mám problém s injectovaním základného Modelu do presenteru cez anotáciu @inject
pri @inject anotácii:
<?php
use App\Model\Orm;
/** @var Orm @inject */
public $orm;
?>
dostávam:
Service of type App\Model\Orm used in @var annotation at Property [
<default> public $orm ] not found. Did you register it in
configuration file?
v prípade inject metody je to vporiadku
<?php
use App\Model\Orm;
/** @var Orm */
public $orm;
public function injectOrm(Orm $orm)
{
$this->orm = $orm;
}
?>
je to vporiadku
pri injectovaní iných služieb cez anotaciu @inject je všetko vporadku
používam:
"require": {
"php": ">= 5.3.7",
"nette/application": ">=2.3.0",
"nette/bootstrap": ">=2.3.0",
"nette/caching": ">=2.3.0",
"nette/component-model": ">=2.3.0",
"nette/database": ">=2.3.0",
"nette/deprecated": ">=2.3.0",
"nette/di": ">=2.3.0",
"nette/finder": ">=2.3.0",
"nette/forms": ">=2.3.0",
"nette/http": ">=2.3.0",
"nette/mail": ">=2.3.0",
"nette/neon": ">=2.3.0",
"nette/php-generator": ">=2.3.0",
"nette/reflection": ">=2.3.0",
"nette/robot-loader": ">=2.3.0",
"nette/safe-stream": ">=2.3.0",
"nette/security": ">=2.3.0",
"nette/tokenizer": ">=2.3.0",
"nette/utils": ">=2.3.0",
"latte/latte": ">=2.3.0",
"tracy/tracy": ">=2.3.0",
"nextras/migrations": "2.3.1",
"nextras/orm": "@dev"
},
"minimum-stability": "dev"
- stenly
- Člen | 6
@hrach
Neco dělám pořád špatně jak tohle přemapuju na entitu nad buildrem jsem
žádný fetch nenašel.
Zkoušel jsem věci jako $this->getRepository()->hydrateEntity($builder);
Ale to nemůže fungovat když je tam queryBuilder misto dat. Díky za radu
class CoreSiteMapper extends Mapper
{
public function detectSite($scriptPath)
{
$builder = $this->builder();
$builder->andWhere('path = SUBSTR(?, 1, LENGTH(`path`))', $scriptPath);
return $builder;
}
}
- hrach
- Člen | 1838
- silne doporucuji pouzivat naming, tj. get pro entity, find pak pro kolekci.
- toto by korektne vratilo kolekci. je prece hovadina volat hydrate nad builderem nebo kolekci
- pokud tahas jenom jeden zaznam, nema vyznam pouzivat builder, ten slouzi zejmena po praci v kolekcich.
- tzn. spravne je cca toto (pokud tedy chces getDetectedSite()):
public function getDetectedSite($scriptPath)
{
$row = $this->connection->query('
SELECT * FROM %table
WHERE [path] = SUBSTR(%s, 1, LENGTH([path]))
', $this->getTableName(), $scriptPath)->fetch();
if (!$row) return NULL;
return $this->getRepository()->hydrateEntity($row->toArray());
}
Nicmene mi prijde zbytecne na to psat vlastni metodu, kdyz se to da pekne „udelat“ v php, idelane v nejake servisni tride:
class SiteDetector
{
/** @var CoreSiteRepository @inject */
public $repository;
public function detectSite($scriptPath)
{
return $this->repository->getBy(['path' => substr($scriptPath, 1)]);
}
}
- wassy
- Člen | 46
Snažím se zprovoznit ORM, ale pořád nemůžu přijít na to, co dělám špatně když mi tracy píše: Unknown or incorrect time zone: ‚Europe/Prague‘ ,
Nejsem moc zběhlý v sql a ani nevím jestli to může být tím, mohl by mi někdo poradit kde může být problém?
Pro jistotu přidávám výtah z configu:
php:
date.timezone: Europe/Prague
extensions:
dbal: Nextras\Dbal\Bridges\NetteDI\DbalExtension
orm: Nextras\Orm\Bridges\NetteDI\OrmExtension
orm:
model: Orm\Orm
dbal:
driver: mysql
host: 127.0.0.1
database: name
username: root
password:
díky za jakoukoli radu :-)