Utilisation de données imbriquées dans les relations "plusieurs à plusieurs"

Neil McGuigan

Traducteur

vermine

Cet article est la traduction de Using nested data for many-to-many relationships publié sur ExtJS Tutorials.

- Titre : Utilisation de données imbriquées dans les relations "plusieurs à plusieurs"

- Auteur : Neil McGuigan

- Traducteur : vermine

- Parution : 7 août 2012

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2012 Neil McGuigan. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Explications

- II. Codes

- III. Remerciements

I - Explications

Une chose intéressante à noter sur l'utilisation de données imbriquées est que Ext va automatiquement donner à vos modèles enfants une clef étrangère vers le modèle parent.

Disons, par exemple, que vous avez un modèle Post (un article de blog) et un modèle Category. La relation est "plusieurs à plusieurs" (many-to-many). Dans votre base de données, vous aurez une table Post, une table Category et une relation PostCategory. Vous ne devrez probablement pas rendre visible la relation, c'est un concept de base de données, mais plutôt la rendre abstraite.

Au lieu de cela, vous aller retourner un article et sa liste de catégories au format json (voir la section suivante).

Vous pouvez récupérer, ajouter ou supprimer des catégories de la liste post.categories() (créée automatiquement en raison de l'association "contient plusieurs" (hasMany)).

II - Codes

Le modèle Post :

Ext.define('app.model.Post', {
extend:'Ext.data.Model',
fields:[
{name:'id', type:'int'},
{name:'title'},
{name:'body'}
],
proxy:{
type:'ajax',
url:'data/posts.json',
reader:{
type:'json',
root:'posts'
}
},
hasMany:[
{
name:'categories',
model:'app.model.Category'
}
]
})

Le modèle Category :

Ext.define('app.model.Category', {
extend:'Ext.data.Model',
fields:[
{name:'id', type:'int'},
{name:'name', type:'string'}
]
});

Les données json :

{
"success":true,
"posts":[
{
"id":1,
"title":"hi",
"body":"there",
"categories":[
{
"id":1,
"name":"hardware"
},
{
"id":3,
"name":"software"
}
]
},
{
"id":2,
"title":"so",
"body":"long",
"categories":[
{
"id":1,
"name":"hardware"
},
{
"id":2,
"name":"porn"
}
]
}
]
}

L'application :

Ext.Loader.setConfig({
enabled: true
});

Ext.application({
name: 'app',
autoCreateViewport:false,
enableQuickTips:false,
requires:[
'app.model.Post',
'app.model.Category'
],

launch: function() {
app.model.Post.load(1, {
success: function(record, op){
console.log(record.categories())
}
})
}
});

III - Remerciements

Cet article a été publié avec l'aimable autorisation de Neil McGuigan. L'article original peut être lu sur le blog ExtJS Tutorials : Using nested data for many-to-many relationships.
Je remercie également ram-0000 pour sa relecture rapide.