Table of Contents
Les associations
Déclaration
Forme simplifiée :
class Product extends SActiveRecord { public static $relationships = array ( 'group' => 'belongs_to', 'details' => 'has_many' ); }
Dans le cas de la forme simplifiée, la classe de destination (option class_name) sera supposée porter le même nom que l’association, ou le singulier de ce nom si l’association est de type has_many ou many_to_many.
Forme standard :
class Product extends SActiveRecord { public static $relationships = array ( 'group' => array ( 'assoc_type' => 'belongs_to', 'class_name' => 'Group' ), 'details' => array ( 'assoc_type' => 'has_many', 'class_name' => 'Detail' ) ); }
Comportement des associations
Associations has_one et belongs_to
- Assigner un objet à une association de ce type n’entraine pas l’enregistrement de l’objet, ni du parent.
Collections (associations has_many et many_to_many)
- Ajouter un objet à une collection entraine son enregistrement, sauf si le parent n’est pas encore enregistré dans la base.
- Tous les membres non enregistrés d’une collection sont sauvés lors de l’enregistrement du parent.
has_one et belongs_to
L’association est accessible de la même façon qu’un attribute :
$record→association→attribute: retourne la valeur de l’attribut de l’objet associé.$record→association→target(): retourne l’objet associé ou null si il n’y en a pas.$record→association→is_null(): retournetruesi il n’y a pas d’objet associé.$record→association = $otherRecord: assigne l’objet à associer, en extrait la PK, et l’assigne en tant que FK.$record→association→create($attributes): retourne un nouvel objet associé, instancié avec$attributes, et sauvé.
Exemple : une classe Thumbnail déclare un ‘photo’ ⇒ ‘belongs_to‘. Vous pouvez utiliser l’association ainsi :
echo $thumbnail→photo→filename;$photo = $thumbnail→photo→target();...
has_many et many_to_many
L’association est accessible de la même façon qu’un attribute, et se comporte comme un SQuerySet :
$record→collection→all(): permet d’itérer les objets associés.$record→collection→count(): retourne le nombre d’objets de la collection.$record→collection→replace(array($entities...)): remplace la collection existante par le tableau d’objets fournis.$record→collection→add($entity): ajoute un ou plusieurs objets à la collection.$record→collection→delete($entity): supprime un ou plusieurs objets de la collection.$record→collection→singular_ids($ids): replace les objets de la collection par les objets dont on fournit les IDs.$record→collection→clear(): supprime tous les objets de la collection.
