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() : retourne true si 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.
 
fr/associations.txt · Last modified: 2008/01/25 12:49