2010-08-28 16 views
1

Je suis en train de mettre en place un site Web DB avec kohana et je dois être en mesure de suivre les révisions. J'ai donc les données derrière les pages individuelles dans deux tableaux. Le premier est la table d'entités génériques que j'utilise pour garder une trace de tout le contenu des sites. Il contient des informations de base: uid de ressources, alias uri, création d'utilisateur, date de création, et utilisateur de publication et modèle de contenu. La table de révision contient rev_id, UID de ressource comme FK, titre, contenu de page, créateur de révision, date de révision et approbateur de publication.Kohana modèle pour la propagation des données à travers plusieurs tables

Le site recherchera une page par ressource uid ou uri alias et renverra la révision publiée la plus récente. Cependant, à partir de l'uri, l'utilisateur peut restaurer la page à des révisions antérieures en incluant une limite de date supérieure dans l'uri ou un # # pour annuler # révisions. Par conséquent, le contrôleur de page prendra l'ID de ressource, éventuellement une date et un nombre d'annulation de révision, demandant l'enregistrement approprié des modèles et passant l'enregistrement approprié à l'affichage.

La création de nouvelles pages mettra à jour les deux tables, la mise à jour des pages mettra à jour une table et la suppression de tables affectera 1 table.

Dois-je créer deux modèles, le modèle d'entité et le modèle de révision? Ou devrais-je simplement avoir le modèle logique qui résume la structure actuelle?

+0

Bonne question. –

+0

Jetez un oeil dans la classe ORM_Versioned: http://dev.kohanaframework.org/projects/kohana2/repository/entry/tags/2.3.4/system/libraries/ORM_Versioned.php. Peut être cela aide – biakaveron

Répondre

0

J'ai eu un problème similaire, et j'ai choisi le chemin avec deux modèles. Désolé pour l'exemple de code, je l'ai écrit uniquement à des fins d'illustration. Pour éviter les problèmes de modification de la structure db, j'ai juste hérité du modèle de révision du modèle d'entité, et des champs parents surchargés (ou juste les ai désinstallés si je n'en avais pas besoin).

ressemblait à ceci:

<?php 

// file /application/classes/model/page.php 
class Model_Page extends Jelly_Model { 

    public static function fields() { 
     return array(
      'id' => new Field_Primary(), 
      'content' => new Field_String(), 
      'author' => new Field_BelongsTo(array(
       'foreign' => 'user', 
       'column' => 'author_id'  
      )), 
      'creation_date' => new Field_Integer(), 
      'uri' => new Field_String() 

     ); 
    } 

    //here we init the model, using previously defined static method 
    public static function initialize(Jelly_Meta $meta){ 
     $meta->table('pages')->fields(self::fields()); 
    } 

} 

// file /application/classes/model/page/draft.php 
class Model_Page_Draft extends Model_Page { 
    public static function initialize(Jelly_Meta $meta) { 
     //here we inherit all the parent models' fields 
     //to skip the dirty work 
     $fields = parent::fields(); 
     //then we overload model propertires 
     //with fields relevant to draft model 
     $fields['rev_id'] = new Field_Integer(); 
     //and choose other table to work with 
     $meta->table('page_draft')->fields($fields); 


    } 
} 

PS Excuse mon anglais