Kdyby/Doctrine, inicializace zakladnich dat v databazi
- Ja
- Člen | 260
Ahoj,
jak resite v doctrine kdyz naklonujete projekt a chcete mit v databazi nejake
predpripravene zaznamy? Napr. zakladniho admin uzivatele, nebo treba nejake
predpripravene texty v CMSku? Asi bych mohl udelat dump s inserty, ale to mi
neprijde moc ‚doctrine-way‘.
Jak to resite vy?
Moc diky:)
Ja
- Azathoth
- Člen | 495
podle mne jsou fixtures zbytečný overkill. já mám zkrátka službu, která mi umí vytvořit iniciální data a vytvořím si nějaký init kdyby/command, kůve kterém pouze zavolám tu jednu inicializační metodu té služby. Taky jsem si četl ten článek od Zlámala, ale pak mi přišlo, že fixture je v mém případě zbytečný mezičlánek a nepotřebuji to tam.
- Tomáš Votruba
- Moderator | 1114
K tomu muzes vyuzit migrace, ktere stejne pak budes potrebovat na zmeny ci pridavani dat.
- Ja
- Člen | 260
@Azathoth: souhlasim, ze je to overkill pokud mas vzdy stejnou db, pokud ale pouzivas mysql+postgre, tak to zacina davat smysl
@TomášVotruba: Jj, na to se chystam uz dlouho ale nejak jsem se jeste neodhodlal se tim prokousat. Jak se vlastne ta tva integrace lisi od migraci v Kdyby/Doctrine?
- newPOPE
- Člen | 648
V podstate su asi 2 mozne stavy projektu
- novy – tu proste pouzijes migracie (Doctrine, Phinx, DbUp, …)
- rozbehnuty – tu si urobis prvu migraciu (ja pouzivam len setup data nie klientske) ktora je vlastne dump DB. A nasledne pouzivas migracie z 1.
No a ked tie DB zacnu mat par desiatok GB tak tam uz sa to riesi inak.
- Tomáš Jablonický
- Člen | 115
Osobně bych si vytvořil pro Command Isntall, kde by byli základní data. Pak bych použil Fixtures pro naplnění DB.
Editoval Tomáš Jablonický (10. 9. 2015 16:57)
- Tomáš Votruba
- Moderator | 1114
@Ja Jake jsou migrace v Kdyby/Doctrine?
Jeste existuji fixtures, ty se hodi pro testovaci databaze.
- Azathoth
- Člen | 495
@TomášVotruba doctrine migrations
@Ja jde mi o to, že když už mám stejně v modelu třídu na
přidání admina, protože admin může přidávat další adminy, tak pak
vypadá můj command na inicializaci například takhle:
protected function execute(InputInterface $input, OutputInterface $output)
{
/** @var IAdminCreator $adminCreator */
$adminCreator = $this->getHelper('container')->getByType(IAdminCreator::class);
$adminCreator->createAdmin('name', 'surname', 'login', 'password');
return 0;
}
a mám to i bez fixtures…
- Tomáš Votruba
- Moderator | 1114
@Azathoth Ty Kdyby\Doctrine ale neintegruje, stačí mrknout na composer.
Proto odkazuju na Zenify\DoctrineMigrations.
- Ja
- Člen | 260
@TomášVotruba zkousim ty tve DoctrineMigrations a nedari se mi to
rozjet, konzole mi vubec nevraci prikazy pro migrations (php ./www/index.php),
mam tam akorat klasicke prikazy pro doctrine orm:schema-tool, atd.
Navic se teda pres composer nestahl ten
Symnedi\EventDispatcher\DI\EventDispatcherExtension – je potreba pro chod
doctrinemigrations, nebo dokonce muze to byt pricinou, proc ty migrace vubec
nevidim v konzoli?
moc diky
Ja
- jiri.pudil
- Nette Blogger | 1034
@Ja smazal jsi cache? Konzole totiž standardně běží v produkčním režimu
- Tomáš Votruba
- Moderator | 1114
@Ja Jak jsi balíček instaloval? Vypadá to, že používáš vývojovou dev-master. Používej poslední stabilní verzi. Composer ti ji vybere sám:
composer require zenify/doctrine-migrations
Editoval Tomáš Votruba (12. 9. 2015 15:32)
- Ja
- Člen | 260
@jiri.pudil tywe, nette pouzivam asi tisic let, a todle me dycky prekvapi, to uz snad neni mozny :) moc diky, jede :)
@TomášVotruba musim rict, ze s composerem se docela jeste peru, ale tak nejak jsem dogooglil, ze bych mohl do composer.json dat neco v tomto smyslu „zenify/doctrine-migrations“: „~2.0“ – a nakonec fungovalo
- Tomáš Votruba
- Moderator | 1114
@Ja Jasně. Instalaci přes composer require x/y
je
mnohem lepší, jelikož vybere za tebe nejnovější funkční verzi. Jsem
rád, že ti to jede.
- David Matějka
- Moderator | 6445
Muzes si pro consoli vytvorit nejaky jiny rozhrani, ve zkratce:
- injectnes Symfony\Component\Console\Application
- jako vstup pouzijes ArrayInput
- jako vystup treba BufferedOutput
- a spustis prikaz na application metodou run
- Ja
- Člen | 260
@DavidMatějka tak uz to bastlim, jeste jsem si neco k tomu dogooglil, ale vykixl jsem na tomto:
<?php
Kdyby\Console\UnknownCommandException
There are no commands defined in the "orm:schema-tool" namespace.
?>
injectnul jsem si teda \Kdyby\Console\Application (ale zkousel jsem predtim i tu symfonackou), ale bohuzel to failuje
<?php
$app = $this->kdyby_console_application;
$command = $app->find('orm:schema-tool:update');
?>
nemel bys tuseni, kde je chyba? Zkousel jsem to i predat jako ArrayInput(array(‚command‘ ⇒ ‚orm:schema-tool:update‘); a pri spusteni run() to vyhodi stejnou chybu
Editoval Ja (14. 9. 2015 20:18)
- fidransky
- Člen | 1
Pro @Ja už je asi pozdě, ale pro případné další zájemce doplním, jak je možno chybu „There are no commands defined in the namespace“ řešit.
// zaregistruju command do Kdyby\Console\Application
$this->application->add(new SampleCommand);
// nastavím IO
$input = new ArrayInput([ // Symfony\Component\Console\Input\ArrayInput
'command' => 'app:sample', // command name
'some-argument' => 'foo', // argument
'-v' => TRUE, // option
]);
$output = new StringOutput; // Kdyby\Console\StringOutput
// spustím
$this->application->run($input, $output);
// vypíšu výstup
Debugger::dump($output->getOutput());
Editoval fidransky (19. 1. 2016 18:35)