Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

135 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nette ORM

GitHub branch checks state

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

Releases

Used by

Contributors

Languages