Nextras/ORM vs Doctrine (Nettrine/ORM)
- sd
- Člen | 87
Ahoj,
do teď jsem vždy používal Nette Database a zvažuji přechod na ORM.
Doporučili byste Nextras/ORM nebo spíš Nettrine/ORM (=> Doctrine)? Koukal
jsem na GitHub (componette –
používá Nextras a contributte/apitte-skeleton –
používá Nettrine). Doctrine mi
přijde, že je s tím zbytečně více psaní oproti Nextras, ale zase
Doctrine je léty prověřená a rozšířená knihovna a tak váhám kterou
zvolit.
Co používáte vy a proč?
Díky moc.
PS: Nette forum a google jsem projížděl, ale nic moc z aktuálního jsem nenašel.
Editoval sd (23. 2. 2020 17:17)
- David Matějka
- Moderator | 6445
Ahoj,
- s Nextras ORM nenapíšeš aplikaci se zcela čistým akademickým návrhem, preferuje více pragmatickou cestu.
- Některé věci v Nextras ORM fungují out-of-box, například je tam vyřešený 1+n problém.
- Lépe se v Nextras pracuje s přímo na úrovni SQL.
- S Doctrine bývá (kvůli větší míře abstrakce) komplikovanější řešit nějaký low-level problémy.
Používal jsem obě dvě knihovny na menší i větší projekty, obě se používají dobře. Souhlasím s tím, že v Doctrine je se vším víc psaní. Kdybych psal nový projekt, tak bych asi sáhnul po Nextras ORM.
- sd
- Člen | 87
Děkuji moc všem za odpovědi.
Asi zvolím tedy Nextras/ORM, na čistě akademickém OOP netrvám, nicméně potřebuji aby se to dalo dobře v budoucnu rozšiřovat a bylo to rychlé (jedná se o API + web app) – což se zdá, že Nextras/ORM splňuje. Možnost pracovat i na úrovni SQL mi snad dává trochu jistoty, že někde nenarazím.
- prog1
- Člen | 45
Ahoj,
začínám s Nextras ORM a pro začátek jsem chtěl vypsat něco
z databáze.
V repozitáři
mám:
<?php
namespace App\Model\Questions;
use App\Model\AbstractRepository;
class QuestionsRepository extends AbstractRepository
{
public static function getEntityClassNames(): array
{
return [Questions::class];
}
public function findHomepageOverview()
{
return $this->findAll();
}
}
V ORM
:
<?php
namespace App\Model\Questions;
use App\Model\AbstractEntity;
/**
* @property string $description
* @property string $choice1
* @property string $choice2
* @property string $choice3
* @property string $choice4
* @property string $option
*/
class Questions extends AbstractEntity
{
}
V presenteru
:
<?php
declare(strict_types=1);
namespace App\Presenters;
use Nette;
use Nextras\Orm\Model\Model;
use App\Model\Questions\Questions;
class HomepagePresenter extends Nette\Application\UI\Presenter
{
/** @var Model @inject */
public $orm;
/** @var Questions */
public $questions;
public function renderDefault()
{
$this->template->questions = $this->orm->questions->findHomepageOverview();
}
}
v configu
:
...
extensions:
console: Contributte\Console\DI\ConsoleExtension(%consoleMode%)
dbal: Nextras\Dbal\Bridges\NetteDI\DbalExtension
orm: Nextras\Orm\Bridges\NetteDI\OrmExtension
migrations: Nextras\Migrations\Bridges\NetteDI\MigrationsExtension
resources: Contributte\DI\Extension\ResourceExtension
orm:
model: Nextras\Orm\Model\Model
repositoryFinder: Nextras\Orm\Bridges\NetteDI\DIRepositoryFinder
dbal:
driver: mysqli
host: 127.0.0.1
database: testing_app
username: root
password:
console:
url: https://contributte.org
migrations:
dir: %appDir%/../migrations # migrations base directory
driver: mysql # pgsql or mysql
dbal: nextras # nextras, nette, doctrine or dibi
withDummyData: %debugMode%
Vyhazuje mi to výjimku:
Nextras\Orm\Exception\InvalidArgumentException
Repository 'questions' does not exist.
Kde mám hledat chybu? Předem díky za rady.
- emololftw
- Člen | 82
@prog1
Ukaž prosím třídu Nextras\Orm\Model\Model
v ní by jsi měl
repository zaregistrovat, nějak takto:
/**
* Model
* @property-read QuestionsRepository $questions
*/
class MyModel extends Model
{
}
Edit: vidím, že používáš repositoryFinder, zkusil jsi registrovat repositories bez toho?
Editoval emololftw (18. 2. 2022 23:07)
- prog1
- Člen | 45
<?php
namespace App\Model;
use App\Model\Answers\AnswersRepository;
use App\Model\Options\OptionsRepository;
use App\Model\Questions\QuestionsRepository;
use App\Model\Users\UsersRepository;
use Nextras\Orm\Model\Model;
/**
* @property-read AnswersRepository $answers
* @property-read OptionsRepository $options
* @property-read QuestionsRepository $questions
* @property-read UsersRepository $users
*/
class Orm extends Model
{
}
- emololftw
- Člen | 82
ještě doplním example projekt z githubu:
Nextras\ORM + Nette, tento repozitář mi zodpověděl snad všechny otázky,
doporučuji projít:
- jendaa
- Člen | 6
@chemix Tady ten člověk založil již několik témat. On vlastně neví, co chce a nikde nenapsal, čeho se snaží dosáhnout. Věřím, že spousta lidí by mu ráda poradila, ale je to těžko, když každé téma je o něčem jiném, tak se celkového výsledku nedá dobrat a křišťálovou kouli má málokdo z nás. Navíc svoje příspěvky maže a znovu zakládá, aby se dostal ve výpisu výše, protože si myslí, že tak něčeho dosáhne
Editoval jendaa (20. 2. 2022 14:01)