Introduction au Zend Framework

 Apprendre Zend Framework

appendix

 Guide de référence Zend Framework


  •  Zend_Gdata
  •  Zend_Http
  •  Zend_InfoCard
  •  Zend_Json
  •  Zend_Layout
  •  Zend_Ldap
  •  Zend_Loader
  •  Zend_Locale
  •  Zend_Log
  •  Zend_Mail
  •  Zend_Markup
  •  Zend_Measure
  •  Zend_Memory
  •  Zend_Mime
  •  Zend_Navigation
  •  Zend_Oauth
  •  Zend_OpenId
  •  Zend_Paginator
  •  Zend_Pdf
  •  Zend_ProgressBar
  •  Zend_Queue
  •  Zend_Reflection
  •  Zend_Registry
  •  Zend_Rest

  •  Zend_Search_Lucene
  •  Zend_Serializer
  •  Zend_Server
  •  Zend_Service
  •  Zend_Session
  •  Zend_Soap
  •  Zend_Tag
  •  Zend_Test
  •  Zend_Text
  •  Zend_TimeSync
  •  Zend_Tool
  •  Zend_Tool_Framework
  •  Zend_Tool_Project
  •  Zend_Translate
  •  Zend_Uri
  •  Zend_Validate
  •  Zend_Version
  •  Zend_View
  •  Zend_Wildfire
  •  Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 61.2% Update 2010-11-28 - Revision 23149 - Version ZF 1.11.x

    27.9. Zend_Db_Table_Definition

    27.9.1. Introduction

    Zend_Db_Table_Definition est une classe qui peut être utilisée pour décrire les relations et les options de configuration qui devraient être utilisées lorsque Zend_Db_Table est manipulée par instantiation concrête.

    27.9.2. Utilisation de base

    Les options décrites dans un objet de définition sont les mêmes que celles qu'utilisent les classes étendant Zend_Db_Table_Abstract. Votre objet de définition peut alors être passé à la classe à l'instanciation, celle-ci connaitra alors la définition de toutes les tables concernées.

    Voici un exemple d'objet de définition qui va décrire les noms des tables et les relations entre les objets supports de ces tables. Note: Si 'name' n'est pas précisé, la clé servira alors de nom à la table, c'est le cas dans notre exemple avec 'genre'.

    Exemple 27.156. Décrire un modèle de base de données

    $definition = new Zend_Db_Table_Definition(array(
        
    'author' => array(
            
    'name' => 'author',
            
    'dependentTables' => array('book')
            ),
        
    'book' => array(
            
    'name' => 'book',
            
    'referenceMap' => array(
                
    'author' => array(
                    
    'columns' => 'author_id',
                    
    'refTableClass' => 'author',
                    
    'refColumns' => 'id'
                    
    )
                )
            ),
        
    'genre' => null,
        
    'book_to_genre' => array(
            
    'referenceMap' => array(
                
    'book' => array(
                    
    'columns' => 'book_id',
                    
    'refTableClass' => 'book',
                    
    'refColumns' => 'id'
                    
    ),
                
    'genre' => array(
                    
    'columns' => 'genre_id',
                    
    'refTableClass' => 'genre',
                    
    'refColumns' => 'id'
                    
    )
                )
            )
        ));

    Comme vous le voyez, les mêmes options que vous utilisez en général en étendant Zend_Db_Table_Abstract sont présentes dans ce tableau. Cette définition va persister vers toutes les tables qui seront créees par votre objet, ceci assure une isolation et un bon fonctionnement.

    Ci-après un exemple d'instanciation d'une table et de l'utilisation de findDependentRowset() et findManyToManyRowset() qui vont correspondre au modèle de données:

    Exemple 27.157. Intéragir avec la définition utilisée

    $authorTable = new Zend_Db_Table('author'$definition);
    $authors $authorTable->fetchAll();

    foreach (
    $authors as $author) {
        echo 
    $author->id ': ' $author->first_name ' ' $author->last_name PHP_EOL;
        
    $books $author->findDependentRowset('book');
        foreach (
    $books as $book) {
            echo 
    '    Book: ' $book->title PHP_EOL;
            
    $genreOutputArray = array();
            foreach (
    $book->findManyToManyRowset('genre''book_to_genre') as $genreRow) {
                
    $genreOutputArray[] = $genreRow->name;
            }
            echo 
    '        Genre: ' implode(', '$genreOutputArray) . PHP_EOL;
        }
    }

    27.9.3. Utilisation avancée

    Quelques fois vous voudriez mixer les utilisations, via la définition et une extension concrête de Zend_Db_Table_Abstract. Pour ce faire, omettez de spécifier une définition concernant la classe concrête. Zend_Db_Table utiisera alors l'instance que vous lui passerez.

    Dans l'exemple d'après, nous allons placer une des tables sous forme de classe concrête, et laisser les autres sous forme de définitions. Nous allons voir alors comment les faire intéragir.

    Exemple 27.158. Mixer la définition et l'extension concrête

    class MyBook extends Zend_Db_Table_Abstract
    {
        protected 
    $_name 'book';
        protected 
    $_referenceMap = array(
            
    'author' => array(
                
    'columns' => 'author_id',
                
    'refTableClass' => 'author',
                
    'refColumns' => 'id'
                
    )
            );
    }

    $definition = new Zend_Db_Table_Definition(array(
        
    'author' => array(
            
    'name' => 'author',
            
    'dependentTables' => array('MyBook')
            ),
        
    'genre' => null,
        
    'book_to_genre' => array(
            
    'referenceMap' => array(
                
    'book' => array(
                    
    'columns' => 'book_id',
                    
    'refTableClass' => 'MyBook',
                    
    'refColumns' => 'id'
                    
    ),
                
    'genre' => array(
                    
    'columns' => 'genre_id',
                    
    'refTableClass' => 'genre',
                    
    'refColumns' => 'id'
                    
    )
                )
            )
        ));

    $authorTable = new Zend_Db_Table('author'$definition);
    $authors $authorTable->fetchAll();

    foreach (
    $authors as $author) {
        echo 
    $author->id ': ' $author->first_name ' ' $author->last_name PHP_EOL;
        
    $books $author->findDependentRowset(new MyBook());
        foreach (
    $books as $book) {
            echo 
    '    Book: ' $book->title PHP_EOL;
            
    $genreOutputArray = array();
            foreach (
    $book->findManyToManyRowset('genre''book_to_genre') as $genreRow) {
                
    $genreOutputArray[] = $genreRow->name;
            }
            echo 
    '        Genre: ' implode(', '$genreOutputArray) . PHP_EOL;
        }
    }

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...