Bonjour,

Je viens vous demander de l'aide car j'ai un sacré problème. Je me suis peut être attaqué à un trop gros poisson, mais j'ai quand même bien envie de le ferrer !

J'essaye de mettre en place une classe Active Record depuis plusieurs jour mais j'ai un problème persistant.

Voici le constructeur de ma classe Active Record
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
abstract class ActiveRecord {
 
	public function __construct( $iId = '' ) {
 
		if ( $iId != '' or $iId != 0) {
 
			/* Mémorisation de la clé. */
			$this -> key = $iId;
 
			/* Ecriture de la requête. */
			$sFields	= implode( ', ', array_keys( $this -> fields));	
			$sQuery		= "SELECT {$sFields} FROM {$this -> table} WHERE {$this -> index} = '{$this -> key}' ";
 
			/* Exécution de la requête. */
			$oStatement	= Factory::get( $this -> driver) -> query( $sQuery);
 
			/* Mémorisation des champs dans l'instance. */
			$this -> fields = $oStatement -> fetch( PDO::FETCH_ASSOC );
		}
	}
Jusqu'ici tout va bien...
Mon problème se trouve là.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
/* Mémorisation des champs dans l'instance. */
			$this -> fields = $oStatement -> fetch( PDO::FETCH_ASSOC );
Lorsque la requête renvoie quelque chose, il n'y a pas de problème. Cependant lorsque le retour est vide. Je me retrouve avec $this -> fields de vide et donc la suite plante inévitablement avec les méthodes magiques :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
public function __get( $sField) {
 
		if ( ! array_key_exists( $sField, $this -> fields)) {
			throw new ActiveRecordException( 'Dommage...' );
		}
 
		return $this -> fields[$sField];
	}
 
	public function __set( $sField, $mValue) {
 
		if ( ! array_key_exists( $sField, $this -> fields)) {
			throw new ActiveRecordException( 'Le champ n\'est pas valide !');
		}
		//var_dump($this -> fields);
 
		$this -> fields[$sField] = $mValue;
	}
Une âme charitable serait-elle à même de m'aider dans cette situation très délicate ???

Merci par avance !