Nextras/ORM vs Doctrine (Nettrine/ORM)

sd
Člen | 87
+
+1
-

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)

fizzy
Backer | 49
+
+1
-

zalezi od projektu, ak ide o jednorazovu vec s par tabulkami vystacis si s nette/database, pri komplexnejsom systeme by som urcite volil Doctrine

David Matějka
Moderator | 6445
+
+7
-

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.

sucho
Člen | 57
+
+1
-

Ja som presedlal na Nextras/ORM zdá sa mi oproti Doctrine niekoľko násobne rýchlejší
treba si zvyknúť na syntax ale inak je v pohode

sd
Člen | 87
+
+1
-

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
+
0
-

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
+
+1
-

@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
+
0
-
<?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
+
+1
-

@prog1

V tom pripade odstraňte z config.neon polozku orm.repositoryFinder a polozku orm.model nahraď tvým modelem

orm:
	model: App\Model\Orm

Editoval emololftw (19. 2. 2022 10:02)

Ages
Člen | 128
+
+3
-

@prog1 již delší dobu čtu tvé dotazy ohledně Nextras a věřím, že se spousta věcí by se ti ujasnila shlédnutím následujích přednášek:

emololftw
Člen | 82
+
+1
-

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:

https://github.com/…m-demo-nette

chemix
Nette Core | 1310
+
+3
-

PS: @prog1 bylo by fajn pokud mas dotaz, tak zalozit vlaskno s definici toho dotazu, namisto pouzivani vlakna, ktere klade uplne jinou otazku a navic cca 2 roky nazpet …

jendaa
Člen | 6
+
0
-

@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)