Table des matières

Documentation de SQLComposer

I - Présentation

1 - Installation

SQLComposer est livré avec un fichier d'installation : installer.php à la racine du zip. L'installation se divise en 4 parties :

Une fois l'installation terminée, les fichiers suivants ont étés générés :

Parmis ces fichiers, il est préférable d'éviter de modifier ceux contenus dans le dossier base/. Si, par exemple, vous souhaitez mettre à jour automatiquement un champ à chaque modification d'un enregistrement, il faut que vous modifiez la classe correspondante dans le dossier includes/.

Exemple : dans la table user, vous avez le champ date_modificatoin que vous souhaitez mettre à jour à chaque modification :

fichier : /sqlcomposer/includes/tables/user_table.php

<?php
class user extends userBase
{
    public static function 
set ($aParams) {
        
$aParams['date_modificatoin'] = time();
        return 
parent::set($aParams);
    }
}

2 - Récupérer une requête

Il est toujours bon de voir la requète qui est lancée afin de vérifier qu'elle a bien été composée. Pour ca, vous avez la méthode GET :


<?php
$Query 
User::SELECT()->WHERE('user_id'5)->get();
echo
'<pre>';print_r$Query );echo'</pre>';

3 - Mise en prod

Lors de la mise en prod, vous souhaiterez sans doute modifier les coordonnées de votre base de donnée. Vous trouverez ces coordonnées dans le fichier includes.php

II - Composition des requètes

Avant de commencer : pour les exemples ci-dessous on considère la base de donnée MySQL suivante :

1 - select simple


<?php
$aUsers User::SELECT()
        ->exec();

for ( $i=0$iMax=count($aUsers) ; $i<$iMax $i++ ) {
    $oUser $aUsers[$i];
    echo $oUser->getUser_pseudo() .'<br />';
}

user #1
user #2
user #3
user #4
user #5

2 - select avec précision des champs


<?php
$aUsers User::SELECT(array('user_id''user_pseudo'))
        ->exec();

for ( $i=0$iMax=count($aUsers) ; $i<$iMax $i++ ) {
    $oUser $aUsers[$i];
    echo $oUser->getUser_pseudo() .'<br />';
}

user #1
user #2
user #3
user #4
user #5

3 - select avec jointure simple


<?php
$aUsers User::SELECT()
            ->JoinBasket()
            ->exec();

for ( $i=0$iMax=count($aUsers) ; $i<$iMax $i++ ) {
    $oUser $aUsers[$i];
    echo $oUser->getUser_pseudo() .'<br />';
    
    $aBaskets $oUser->getBasket();
    echo '<ul>';
    for ( $j=0$jMax=count($aBaskets) ; $j<$jMax $j++ ) {
        $oBasket $aBaskets[$j];
        echo '<li>'$oBasket->getBasket_name() .'</li>';
    }
    echo '</ul>';
}

user #1
user #2
user #3

4 - select avec jointures "non naturelle" et alias


<?php
$aUsers User::SELECT()->alias('user_table')
            ->JoinBasket()->alias('user_baskets')
            ->on('user_table.user_id = user_baskets.basket_id')
            ->exec();

for ( $i=0$iMax=count($aUsers) ; $i<$iMax $i++ ) {
    $oUser $aUsers[$i];
    echo $oUser->getUser_pseudo() .'<br />';
    
    $aBaskets $oUser->getUser_baskets();
    echo '<ul>';
    for ( $j=0$jMax=count($aBaskets) ; $j<$jMax $j++ ) {
        $oBasket $aBaskets[$j];
        echo '<li>'$oBasket->getBasket_name() .'</li>';
    }
    echo '</ul>';
}

user #1
user #2
user #3
user #4
user #5

5 - select avec clause where simple


<?php
$aUsers User::SELECT()
            ->where('user_id'1)
            ->exec();

if ( count($aUsers)>) {
    echo $aUsers[0]->getUser_pseudo();
}

user #1

6 - select avec clause where complexe


<?php
$aUsers User::SELECT()
            ->where('user_pseudo''user #1')
            ->_and_('user_pass'md5('test') )
            ->exec();

if ( count($aUsers)>) {
    echo $aUsers[0]->getUser_pseudo() .'<br />';
}


7 - select avec clause order by


<?php
$aUsers User::SELECT()
            ->orderBy('user_id ASC')
            ->exec();

if ( count($aUsers)>) {
    echo $aUsers[0]->getUser_pseudo() .'<br />';
}

////////////////////////////////////////////////////////////////////////////////////////////////////
$aUsers User::SELECT()
            ->orderByAsc('user_id')
            ->exec();

if ( count($aUsers)>) {
    echo $aUsers[0]->getUser_pseudo() .'<br />';
}

////////////////////////////////////////////////////////////////////////////////////////////////////
$aUsers User::SELECT()
            ->orderByDesc('user_id')
            ->exec();

if ( count($aUsers)>) {
    echo $aUsers[0]->getUser_pseudo() .'<br />';
}

user #1
user #1
user #1

8 - select avec clause group by


<?php
$aUsers User::SELECT(array('count(basket_id)''user_id''user_pseudo'))
            ->joinBasket()
            ->groupBy('user_id')
            ->exec();

for ( $i=0$iMax=count($aUsers) ; $i<$iMax $i++ ) {
    $oUser $aUsers[$i];
    echo $oUser->getUser_pseudo() .' : '$oUser->getBasket(0)->getCount_basket_id() .'<br />';
}

user #1 : 3
user #2 : 2
user #3 : 2

9 - select avec clause group by et having


<?php
$aUsers User::SELECT(array('count(basket_id)''user_id''user_pseudo'))
            ->joinBasket()
            ->groupBy('user_id')
            ->having('count(basket_id)''>''2')
            ->exec();

for ( $i=0$iMax=count($aUsers) ; $i<$iMax $i++ ) {
    $oUser $aUsers[$i];
    echo $oUser->getUser_pseudo() .' : '$oUser->getBasket(0)->getCount_basket_id();
}

user #1 : 3

10 - select avec clause limit


<?php
$aUsers User::SELECT()
            ->limit(1)
            ->exec();

for ( $i=0$iMax=count($aUsers) ; $i<$iMax $i++ ) {
    $oUser $aUsers[$i];
    echo $oUser->getUser_pseudo() .'<br />';
}

echo '<hr />';
////////////////////////////////////////////////////////////////////////////////////////////////////
$aUsers User::SELECT()
            ->limit(13)
            ->exec();

for ( $i=0$iMax=count($aUsers) ; $i<$iMax $i++ ) {
    $oUser $aUsers[$i];
    echo $oUser->getUser_pseudo() .'<br />';
}

user #1

user #2
user #3
user #4

11 - select avec clause order by, group by, having et limit


<?php
$aUsers User::SELECT(array('count(basket_id)''user_id''user_pseudo'))
            ->joinBasket()
            ->groupBy('user_id')
            ->having('count(basket_id)''>''1')
            ->orderBy('user_pseudo')
            ->limit(5)
            ->exec();

for ( $i=0$iMax=count($aUsers) ; $i<$iMax $i++ ) {
    $oUser $aUsers[$i];
    echo $oUser->getUser_pseudo() .' : '$oUser->getBasket(0)->getCount_basket_id() .'<br />';
}

user #1 : 3
user #2 : 2
user #3 : 2

12 - insert


<?php
User::INSERT(array(
    'user_pseudo',
    'user_pass'
))->values(array(
    'user test',
    md5('pass')
))->exec();

$iUserId SQLComposer::getLastInsertId();
echo 'user_id : '$iUserId;

user_id : 6

13 - insert into ... select


<?php

Basket::INSERT(array(
    'user_id',
    'basket_name',
    'basket_total_price'
))->values(
    user::SELECT(array('user_pseudo''"nom du panier"''"0"'))
            ->where('user_pseudo''user #2')
)->exec();


14 - update simple


<?php
Basket::Update()->set(array(
    'user_id'        => 3,
    'basket_name'    => 'basket 3'
))->Where('basket_id'5)
->exec();

////////////////////////////////////////////////////////////////////////////////////////////////////

$oBasket = new BasketRecord();
$oBasket->setBasket_id(2);
$oBasket->select(2);

$oBasket->setUser_id(3);
$oBasket->update();


15 - update join


<?php
Basket::Update()
->joinUser()
->set(array(
    'basket.user_id'    => 3,
    'user.user_pseudo'    => 'User with basket #3'
))->Where('basket_id'5)
->exec();


16 - delete


<?php
Basket::delete()
    ->Where('basket_id'5)
    ->get();


17 - delete join




III - Les 22 clause WHERE

Dans SQLComposer, il y a 22 façon d'écrire une clause WHERE. Les clause WHERE sont composé lors de l'appel aux fonctions ON, WHERE, _AND_, _OR_, _XOR_ ou HAVING. Cela semble compliqué, mais en fait, c'est très instinctif :

Si une seule clause WHERE ne vous suffis pas, n'hésitez pas a utiliser les méthodes _AND_, _OR_ ou _XOR_.

Les différentes compositions de ces valeurs donnent les 22 résultats suivants :

1 - ( (String) QUERY, (Array2) VALUES, (Array) OPERATEUR, (String) LIAISON, (Bool) MODIFIER )

C'est la forme la plus compléte. Les autres formes sont ramenées a cette forme "basique" :


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
            array(
1'toto'),
            array(
2'tata'),
            array(
3'titi'),
        ),
        array(
'>''='),
        
'OR',
        
false
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
		(t___0.user_id > 1 AND    t___0.user_pseudo = 'toto')
	OR	(t___0.user_id > 2 AND    t___0.user_pseudo = 'tata')
	OR	(t___0.user_id > 3 AND    t___0.user_pseudo = 'titi') 

2 - ( (String) QUERY, (Array) VALUES, (Array) OPERATEUR, (String) LIAISON, (Bool) MODIFIER )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
1'toto'),
        array(
'>''='),
        
'OR',
        
false
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id > 1 AND    t___0.user_pseudo = 'toto') 

3 - ( (String) QUERY, (Array2) VALUES, (Array) OPERATEUR, (String) LIAISON )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
            array(
1'toto'),
            array(
2'tata'),
            array(
3'titi'),
        ),
        array(
'>''='),
        
'OR'
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
		(t___0.user_id > 1 AND    t___0.user_pseudo = 'toto')
	OR	(t___0.user_id > 2 AND    t___0.user_pseudo = 'tata')
	OR	(t___0.user_id > 3 AND    t___0.user_pseudo = 'titi') 

4 - ( (String) QUERY, (Array2) VALUES, (Array) OPERATEUR, (Bool) MODIFIER )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
            array(
1'toto'),
            array(
2'tata'),
            array(
3'titi'),
        ),
        array(
'>''='),
        
false
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
		(t___0.user_id > 1 AND    t___0.user_pseudo = 'toto')
	AND (t___0.user_id > 2 AND    t___0.user_pseudo = 'tata')
	AND (t___0.user_id > 3 AND    t___0.user_pseudo = 'titi') 

5 - ( (String) QUERY, (Array2) VALUES, (String) LIAISON, (Bool) MODIFIER )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
            array(
1'toto'),
            array(
2'tata'),
            array(
3'titi'),
        ),
        
'OR',
        
false
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
		(t___0.user_id = 1 AND    t___0.user_pseudo = 'toto')
	OR	(t___0.user_id = 2 AND    t___0.user_pseudo = 'tata')
	OR	(t___0.user_id = 3 AND    t___0.user_pseudo = 'titi') 

6 - ( (String) QUERY, (Array) VALUES, (Array) OPERATEUR, (String) LIAISON )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
3'titi'),
        array(
'>''='),
        
'OR'
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id > 3 AND    t___0.user_pseudo = 'titi') 

7 - ( (String) QUERY, (Array) VALUES, (Array) OPERATEUR, (Bool) MODIFIER )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
3'titi'),
        array(
'>''='),
        
true
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id > 3 AND    t___0.user_pseudo = 'titi') 

8 - ( (String) QUERY, (Array) VALUES, (String) LIAISON, (Bool) MODIFIER )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
3'titi'),
        
'OR',
        
true
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id = 3 AND    t___0.user_pseudo = 'titi') 

9 - ( (String) QUERY, (Array2) VALUES, (Bool) MODIFIER )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
            array(
1'toto'),
            array(
2'tata'),
            array(
3'titi'),
        ),
        
true
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
		(t___0.user_id = 1 AND    t___0.user_pseudo = 'toto')
	AND	(t___0.user_id = 2 AND    t___0.user_pseudo = 'tata')
	AND	(t___0.user_id = 3 AND    t___0.user_pseudo = 'titi') 

10 - ( (String) QUERY, (Array2) VALUES, (Array) OPERATEUR )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
            array(
1'toto'),
            array(
2'tata'),
            array(
3'titi'),
        ),
        array(
'>''=')
    )
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
		(t___0.user_id > 1 AND    t___0.user_pseudo = 'toto')
	AND	(t___0.user_id > 2 AND    t___0.user_pseudo = 'tata')
	AND	(t___0.user_id > 3 AND    t___0.user_pseudo = 'titi') 

11 - ( (String) QUERY, (Array2) VALUES, (String) LIAISON)


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
            array(
1'toto'),
            array(
2'tata'),
            array(
3'titi'),
        ),
        
'OR'
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
		(t___0.user_id = 1 AND    t___0.user_pseudo = 'toto')
	OR	(t___0.user_id = 2 AND    t___0.user_pseudo = 'tata')
	OR	(t___0.user_id = 3 AND    t___0.user_pseudo = 'titi') 

12 - ( (String) QUERY, (Array) VALUES, (Bool) MODIFIER )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
1'toto'),
        
false
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id = 1 AND    t___0.user_pseudo = 'toto') 

13 - ( (String) QUERY, (Array) VALUES, (String) LIAISON)


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
1'toto'),
        
'OR'
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id = 1 AND    t___0.user_pseudo = 'toto') 

14 - ( (String) QUERY, (Array) VALUES, (Array) OPERATEUR )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
1'toto'),
        array(
'>''=')
    )
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id > 1 AND    t___0.user_pseudo = 'toto') 

15 - ( (String) QUERY, (Array) OPERATEUR, (Array) VALUES )


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
'>''='),
        array(
1'toto')
    )
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id > 1 AND    t___0.user_pseudo = 'toto') 

16 - ( (String) QUERY, (String) OPERATEUR, (String) VALUES)


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id''>'5
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id > 5) 

17 - ( (String) QUERY, (Bool) MODIFIER )

Pour des raisons techniques, le champ MODIFIER ne peux pas être à FALSE. Cette syntaxe est à éviter si vous mettez des saisies utilisateurs (Cf. : exemple avec une double quote qui provoque une injection)


<?php
User
::SELECT()
    ->
WHERE(
        
'user_pseudo = " toto " tata"'true
    
)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	( t___0.user_pseudo = " toto " tata" ) 

18 - ( (String) QUERY, (Array) VALUES)


<?php
User
::SELECT()
    ->
WHERE(
        
'user_id AND user_pseudo',
        array(
1'toto')
    )
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id = 1 AND    t___0.user_pseudo = 'toto') 

19 - ( (String) QUERY, (String) VALUES)


<?php
User
::SELECT()
    ->
WHERE('user_id'1)
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id = 1)

20 - ( (String) QUERY)


<?php
User
::SELECT()
    ->
WHERE('user_id = 1')
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id = 1)

21 - ( (String) QUERY, (Array) OPERATEUR, (String) VALUES1, (String) VALUES2 )


<?php
User
::SELECT()
    ->
WHERE('user_id AND user_pass', array('=''>'), 1'toto')
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id = 1 AND    t___0.user_pass > 'toto') 

22 - ( (String) QUERY, (String) VALUES1, (String) VALUES2 )


<?php
User
::SELECT()
    ->
WHERE('user_id AND user_pass'1'toto')
    ->
exec();
SELECT
	t___0.user_id AS `t___0.user_id`,
	t___0.user_pseudo AS `t___0.user_pseudo`,
	t___0.user_pass AS `t___0.user_pass`
FROM
	`user` AS t___0
WHERE
	(t___0.user_id = 1 AND    t___0.user_pass = 'toto') 

IV - Récupération de données

Lors de son installation, SQLComposer créé 3 types de classes : les Records, les Collections et les Tables. Il est important de comprendre ces trois types de structures afin de bien comprendre la profondeur de SQLComposer.

Tout d'abord, les classes Tables : il en existe une par table que vous avez sélectionné lors de la première étape de l'installation de SQLComposer. Elles permettent de faire des requêtes (INSERT, SELECT, UPDATE et DELETE) sur les tables. Lorsque vous faites un SELECT sur une table, la méthode exec vous retourne un objet de type Collection (selon la classe à la base du SELECT).

Les classes Collection sont des listes de Records et permettent de faire les opération UPDATE et DELETE sur un groupe de données. Commes vous avez pu le voir, elles sont faciles a interroger :


<?php
$aUsers 
User::SELECT()->exec();

echo
'<pre>$aUsers est de la classe ';print_rget_class($aUsers) );echo'</pre>';
// $aUsers est de la classe userCollection

$oUser $aUsers[0];
echo
'<pre>$oUser est de la classe ';print_rget_class($oUser) );echo'</pre>';
// $oUser est de la classe userRecord

Les Tables

Les classes Tables sont des extensions des classes *BaseTable; pareil pour les classes *Collection / *BaseCollection et les classes *Record / *BaseRecord (l'étoile correspond au nom d'une table). Il ne faut pas modifier les classes Base : si vous devez re-générer les classes de SQLComposer, elles seront automatiquement réécrites (afin de réécrire les jointures automatiques).

Notez que les classes Tables n'ont pas de suffixe. Elles s'appellent directement comme la table qu'elles représentent afin de simplifier le requêtage. Ce sont des classes entièrement statiques : afin de conserver une certaine forme de logique, les seules méthodes que vous devez appeler sont :

Comme expliqué ci-dessus, il est possible (et conseillé dans certains cas) de surcharger ces quatres méthodes, par exemple, la méthode delete peut être surcharger afin d'automatiser l'archivage de données au lieu de les supprimer, la méthode update afin de connaitre la dernière mise à jour d'un élément, etc.

Les Collections

Les objets collections permettent d'avoir "plus" qu'un simple array. Ils permettent de mettre à jour simplement une liste d'éléments ou de les supprimer. Les opérations d'insertions ou de selection n'existent pas sur ces objets.

Les Records

Les Records sont les objets les plus difficiles à appréhender. Pour chaques champs que vous avez sélectionné, la méthode magique __call permet de récupérer et/ou modifier les valeurs de l'objet :


<?php
$aUsers 
User::SELECT()->exec();
$oUser $aUsers[0];
echo 
$oUser->getUser_id();

Afin d'éviter les problèmes de doublons (certaines tables mal conçues contiennent les champs userid ET user_id), le nom du champ n'est pas modifié. Il s'agit uniquement de rajouter get ou set devant le nom du champ, peut importe la casse.

Une règle a ne pas oublier lorsque vous utiliser SQLComposer, c'est qu'a chaque requête, un objet n'est créé qu'une seule fois et est le même (comprendre même adresse mémoire) pour chaque objet qui lui sont lié :


<?php
$aUsers 
User::SELECT()
            ->
JoinBasket()
            ->
Where('user_id'1)
            ->
exec();
$oUser $aUsers[0];

$oPanier0 $oUser->getBasket(0);
$oPanier1 $oUser->getBasket(1);

$oPanier0->getUser(0)->setUser_pseudo('toto');

echo
'<pre>';print_r$oPanier0->getUser(0)->getUser_pseudo() );echo'</pre>';
echo
'<pre>';print_r$oPanier1->getUser(0)->getUser_pseudo() );echo'</pre>';

Dans le cas ci-dessus, il serait illogique que les deux paniers ne retournent pas le même objet User et affichent un User_pseudo différent.

Afin de faciliter la sélection, il est possible d'utiliser la méthode select sur les objets Record. Afin d'éviter tout problème, il est cependant indispensable de connaitre la clé primaire (simple ou multiple) des objets que vous voulez sélectionner :


<?php
$oBasket 
= new BasketRecord();
$oBasket->setBasket_id(1);
$oBasket->select();
echo 
$oBasket->getUser_id();

Conclusion

Cette présentation est maintenant finie, n'hésitez pas à venir sur le site d'I-Radian si vous avez des questions à poser.