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 renvoie FALSE 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 constante TABLE 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"