.: HosiriS :.

Informatica e non solo

Gestire le relazioni molti a molti con CakePHP

Posted by hosiris su dicembre 30, 2010

Eccoci al motivo che mi ha spinto a provare CakePHP: la gestione delle relazioni!
Quando ho iniziato con le prime prove credevo di dovermi impelagare in qualcosa di complesso, ed invece dopo 5 min riuscivo a gestire ogni tipo di relazione… direi che la vera potenza è questa!

Allora, come possibile esempio prendo in considerazione la necessità di memorizzare dati degli utenti di un sistema, ognuno di questi utenti apparterrà ad un o più gruppi che daranno accesso a molte funzionalità.
Il DB sarà quindi composto dalle tabelle:

  • users(id, name, surname, username, password, last_connection)
  • groups(id, name, permissions)

La relazione tra queste tabelle è di tipo molti a molti, quindi dobbiamo creare una tabella aggiuntiva di servizio:

  • memberships(id, user_id, group_id)

Dopo aver creato le tabelle del DB, passiamo alla scrittura dei componenti del pattern MVC: controller, model e view.
I controller users_controller e groups_controller saranno costituiti da sole due linee di codice, perchè ci avvaleremo degli scaffold, e di conseguenza le viste saranno generate automaticamente (il nostro scopo è mostrare le relazioni.):

<?php
//app/controller/users_controller.php
class UsersController extends AppController {
  var $name = 'Users';
  var $scaffolds;
}
?>


<?php
//app/controller/groups_controller.php
class GroupsController extends AppController {
  var $name = 'Groups';
  var $scaffolds;
}
?>

Andiamo a trattare la parte più importe: il model. In questo andremo a scrivere le informazioni necessarie alla nostra applicazione per conoscere la struttura del nostro DB. Creaimo due file nella cartella app/model:

<?php
//app/model/user.php
class User extends AppModel {
  var $name = 'User';
  var $displayField = 'name';
  var $hasAndBelongsToMany = array(
    'Group' => array(
      'className' => 'Group',
      'joinTable' => 'memberships',
      'foreignKey' => 'user_id',
      'associationForeignKey' => 'group_id',
      'unique' => true,
      'conditions' => '',
      'fields' => '',
      'order' => '',
      'limit' => '',
      'offset' => '',
      'finderQuery' => '',
      'deleteQuery' => '',
      'insertQuery' => ''
    )
  );
}
?>


<?php
//app/model/group.php
class Group extends AppModel {
  var $name = 'Group';
  var $displayField = 'name';
  var $hasAndBelongsToMany = array(
    'User' => array(
      'className' => 'User',
      'joinTable' => 'memberships',
      'foreignKey' => 'group_id',
      'associationForeignKey' => 'user_id',
      'unique' => true,
      'conditions' => '',
      'fields' => '',
      'order' => '',
      'limit' => '',
      'offset' => '',
      'finderQuery' => '',
      'deleteQuery' => '',
      'insertQuery' => ''
    )
  );
}
?>

Come si può notare tutte le informazioni relative alle relazioni tra le tabelle sono contenute nell’attributo $hasAndBelongsToMany.
Salvate e tramite il browser aprite l’indirizzo “http://localhost/users&#8221; provate a fare degli inserimenti, non notate che sono presenti i campi della tabella “groups”?

Questo attributo ci permette. quindi, di gestire le relazioni molti a molti, ma abbiamo molti altri attributi per gestire ogni tipo di relazione: $hasMany, $toBelongs, etc…

Buon divertimento.

Una Risposta to “Gestire le relazioni molti a molti con CakePHP”

  1. blackout said

    finalmente questa molti-a-molti ti funziona😛 la “sinfonia” della torta😀

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger cliccano Mi Piace per questo: