treptowkolleg / orm
object relational manager
Installs: 83
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:package
Requires
- php: >=8.1
- ext-pdo: *
- treptowkolleg/env: dev-master
This package is auto-updated.
Last update: 2025-03-23 08:05:59 UTC
README
Installation
composer require treptowkolleg/orm:dev-master
Verwendung
Entity anlegen
Benutzerdefiniert
Über die seit php 8.1
eingeführten Attribut-Klassen, können wir unsere Datenbank-Relation
direkt über die Properties unserer Klasse definieren.
<?php use TreptowKolleg\ORM\Attribute; class MyEntity { #[Attribute\Id] #[Attribute\AutoGenerated] #[Attribute\Column(type: Attribute\Type::Integer)] private ?int $id = null #[Attribute\Column] private string $name; // getter & setter ... }
Vordefiniert
Für eine vielzahl vordefinierte und häufig vorkommender Fälle kannst du auf "Textbausteine" zurückgreifen, die alles für dich inklusive getter und setter erledigen.
<?php use TreptowKolleg\ORM\Attribute; use TreptowKolleg\ORM\Field; class MyEntity { // fügt id sowie getter hinzu use Field\IdField; // fügt Vor- und Nachname sowie getter und setter hinzu use Field\PersonField; // fügt Felder für automatisches Datum/Uhrzeit für Erstellungs- und Update-Feld hinzu use Field\CreatedAndUpdatedField; }
Tabelle in DB anlegen
Tabellen werden simpel über den EntityManager erstellt.
require 'vendor/autoload.php'; $entityManager = new \TreptowKolleg\ORM\Model\EntityManager(); $entityManager->createTableIfNotExists(MyEntity:class);
Objekte speichern
Auch INSERT
und UPDATE
von Objekten erfolgt mittels EntityManager.
require 'vendor/autoload.php'; $entityManager = new \TreptowKolleg\ORM\Model\EntityManager(); $myEntity = new Entity(); $myEntity->setName('John Doe'); // Änderung einreihen $entityManager->persist($myEntity); // Alle eingereihten Änderungen auf Datenbank anwenden $entityManager->flush();
Repository anlegen
Um Datensätze (Tupel) aus den Relationen zu laden, benötigen wir eine auf unsere Entity-Klasse zugeschnittene Repository-Klasse. Anbei die Minimalkonfiguration.
<?php use TreptowKolleg\ORM\Attribute; use TreptowKolleg\ORM\Model\Repository; /** * @extends Repository<MyEntity> */ class MyEntityRepository extends Repository { public function __construct() { parent::__construct(MyEntity::class) } // custom find methods ... }
Tupel (Datensätze) holen
Im Repository verfügbare Methoden zum Laden von Tupeln. In unserer erstellten Repository-Unterklasse können wir noch weitere spezialisierte Methoden entwerfen.
Da das Repository über unsere Entity-Klasse Bescheid weiß, werden dankenswerterweise keine assoziativen Arrays mit den Daten zurückgeliefert, sonden direkt Instanzen unserer Entity-Klasse bzw. ein Array mit Entity-Instanzen, wenn nach mehreren Tupeln gesucht wird:
require 'vendor/autoload.php'; $repository = new MyEntityRepository(); // Alle Tupel $objects = $repository->findAll(); // Alle Tupel, die Bedingung erfüllen $objects = $repository->findBy(['name' => 'John Doe']); // Alle Tupel, die bestimmte Werte enthalten (unscharfe Suche) $objects = $repository->findByLike('name' => 'John'); // Ein Tupel, das die Bedingung erfüllt $objects = $repository->findOneBy(['name' => 'John Doe']); // Ein Tupel mit unscharfer Suche finden $objects = $repository->findOneByLike(['name' => 'Doe']); // Ein Tupel mit id 'x' finden $objects = $repository->find(23);