Entités
Depuis la version 1.0 nous utilisons un système générique d'entités pour représenter les enregistrements de la base de données sous forme d'objet.
- Chaque entité correspond à une entrée existante ou future dans la base de données
- Pour savoir si une entité existe (a été enregistrée), la méthode
exists
est dispo sur chaque entité, si elle renvoieFALSE
c'est que l'entité n'est pas enregistrée - Les entités sont dans le namespace
Entities
uniquement
EntityManager
- L'objet
KD2\DB\EntitityManager
permet de récupérer facilement des entités - Dans les requêtes SQL passées à l'EntityManager,
@TABLE
est remplacé par le nom de la table spécifié dans la constanteTABLE
de la classe de l'entité
Contrairement à d'autres systèmes de gestion d'entités, les entités retournées par EntityManager
ne sont pas cachées, c'est à dire que chaque appel renvoie une nouvelle entité :
$transaction = EntityManager::findOne(Entities\Accounting\Transaction::class, 'SELECT * FROM @TABLE WHERE id = ?;', $id);
$t2 = EntityManager::findOneById(Entities\Accounting\Transaction::class, $id);
var_dump($transaction === $t2); // false
Donc si le même enregistrement de base de données est utilisé dans une autre instance d'entité, il ne sera pas modifié :
$transaction = EntityManager::findOne(Entities\Accounting\Transaction::class, 'SELECT * FROM @TABLE WHERE id = ?;', $id);
$t2 = EntityManager::findOneById(Entities\Accounting\Transaction::class, $id);
print_r($transaction->label); // "Test d'écriture"
print_r($t2->label); // "Test d'écriture"
$t2->label = 'Change change';
$t2->save();
print_r($transaction->label); // "Test d'écriture"
print_r($t2->label); // "Change change"