fykosak / nette-orm
Installs: 51 008
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 8
Forks: 0
Open Issues: 1
Requires
- php: >=8.1
- ext-gettext: *
- ext-pdo: *
- nette/database: ^3.1
- nette/di: ^3.0
Requires (Dev)
- nette/tester: ^2.4.0
- squizlabs/php_codesniffer: 3.7.1
README
install
Create ORM model
<?php /** * @property-read string name * @property-read int event_id * @property-read \DateTimeInterface begin * @property-read \DateTimeInterface end * @note better typehinting for your IDE */ class ModelEvent extends AbstractModel { // you can define realtions public function getParticipants(): GroupedSelection { return $this->related('participant', 'event_id'); } // you can define own metods public function __toArray(): array { return [ 'eventId' => $this->event_id, 'begin' => $this->begin ? $this->begin->format('c') : null, 'end' => $this->end ? $this->end->format('c') : null, 'name' => $this->name, ]; } }
Create ORM service
<?php class ServiceEvent extends AbstractService { public function getNextEvents(): TypedTableSelection { return $this->getTable()->where('begin > NOW()'); } }
Register extension
orm: <table_name>: service: 'FQN of service' model: 'FQN of model' <another_table_name>: service: 'FQN of another service' model: 'FQN of another model'
extensions: orm: Fykosak\NetteORM\ORMExtension
Examples
TypedTableSelection is a regular selection you can use all methods like in nette DB Selection.
$query= $sericeEvent->getNextEvent(); $query->where('name','My cool event');
TypedTableSelection return ORM model instead of ActiveRow
, but ORM model is a descendant of a ActiveRow
.
$query= $sericeEvent->getNextEvent(); foreach($query as $event){ $event // event is a ModelEvent } $model = $sericeEvent->getNextEvent()->fetch(); // Model is a ModelEvent too.
Take care GroupedSelection
still return ActiveRow
, you can use static method createFromActiveRow
$query= $sericeEvent->getParticipants(); foreach($query as $row){ // $row is a ActiveRow $participant = ModelParticipant::createFromActiveRow($row); }
Define relations between Models by methods
class ModelParticipant extends AbstractModel { // use ActiveRow to resolve relations and next create a Model. public function getEvent(): ModelEvent { return ModelEvent::createFromActiveRow($this->event); } }
Now you can use ReferencedAccessor
to access Model
$myModel // any model that has define single method returned ModelEvent $modelEvent = ReferencedAccessor::accessModel($myModel,ModelEvent::class);