Visualizzazione dei risultati da 1 a 7 su 7

Discussione: dubbi su Zend_Table

  1. #1

    dubbi su Zend_Table

    Ciao raga,
    sto iniziando con Zenf Framework, dopo molto studio sono al progetto concreto e sono subito bloccato... non riesco a comprendere bene Zend_Table, esempio nell'anagrafica prodotti ho le seguenti tabelle:
    product (campi generali)
    product_id
    model
    code
    .....

    product_desc (campi legati alla lungua)
    product_id
    language_id
    name
    desc
    price
    ....

    poi ho altre tabelle, (visto che è multicategoria) product_category, poi product_image etc... ma lasciamo perdere queste.
    Ora quando eseguo una query sui prodotti ho bisogno come minimo di una join tra product e product_desc, ma non riesco a capire come lavorare con Zend_Table, mi verrebbe voglia di non usarlo e lavorare direttamente con il DB adapter, per esempio il modello Catalog sarebbe una roba tipo:

    codice:
    class Model_Catalog
    {
        public function getProductById($id)
        {
            $id = (int) $id;
    
            $db = Zend_Registry::get('db');
            $db->setFetchMode(Zend_Db::FETCH_OBJ);
    
            $sql = 'SELECT * FROM product as p INNER JOIN product_desc as pd USING(category_id) WHERE category_id = ? and language_id = ?';
    
            return $db->fetchAll($sql, array(2,1));
        }
        ....
        ....
    }
    Ho un sacco di confusione in testa in questo momento, questo approccio è sbagliato? da un lato mi semplificherebbe la vita anche nella scrittura dell'SQL. Svantaggi?
    --- [color= darkorange]L'uomo è il computer più straordinario di tutti [/color]----

    http://www.simogrima.com

    Grifone

  2. #2
    scusate l'SQL di sopra è sbagliato:

    codice:
    $sql = 'SELECT * FROM product as p INNER JOIN product_desc as pd USING(product_id) WHERE product_id = ? and language_id = ?';
    --- [color= darkorange]L'uomo è il computer più straordinario di tutti [/color]----

    http://www.simogrima.com

    Grifone

  3. #3
    ti scrivo un esempio di join:

    Codice PHP:
    $model_tabella1 = new Model_OggettoUno();
    $model_tabella2 = new Model_OggettoDue();
            
    $select $this->select()
            ->
    setIntegrityCheck(false)
            ->
    from( array('model1' => $model_tabella1->info('name')), array(    
                          
    'field1',
                          
    'field2'
                          
    'field3'
                          
    'field4'
                          
    'field5'
              
    ))
            ->
    join( array('model2' => $model_tabella2->info('name')), 
            
    'model2.`field1` = model1.`field1`',
                       array(                                
                          
    'field6',
                          
    'field7'
            
    ))
            ->
    where("quello che ti serve" )
            ->
    order(array("quello che ti serve");
        
            
    $result$this->fetchAll($select); 
    Piccolo consiglio: se decidi di usare un framework, devi mettere in conto di perdere del tempo all'inizio per studiarne i meccanismi e la struttura interna. Devi avere pazienda, è chiaro che all'inizio ti sembra di perdere tempo, ma non è così: tieni duro e vedrai che dopo un pochetto capirai il valore di uno strumento del genere

  4. #4
    Prima di tutto grazie per la risposta, fatto e funziona, a questo punto ti chiederei anche se dal punto di vista logico questo potrebbe essere il modo giusto di lavorare.
    Creo un modello Catalog che mi gestisce il catalogo prodotti, usando delle risorse (Zend_Db_Table). Ecco come ho fatto:

    resource/Category.php:
    Codice PHP:
    class Resource_Category extends Zend_Db_Table_Abstract
    {
        protected 
    $_name 'category';
        protected 
    $_primary 'category_id';

        
        public function 
    getCategoryByIdent($ident)
        {

            
    $categoryDesc = new Resource_Categorydesc();
            
    $select $this->select()
                           ->
    setIntegrityCheck(false)
                           ->
    from( array('c' => $this->info('name')), array(
                               
    'ident',
                               
    'image'
                           
    ))
                           ->
    join( array('cd' => $categoryDesc->info('name')),
                               
    'cd.`category_id` = c.`category_id`',
                               array(
                                   
    'name',
                                   
    'language_id'
                           
    ))
                           ->
    where('c.`ident` = ?'$ident)
                           ->
    where('cd.`language_id` = ?'1);
                           
            return 
    $this->fetchRow($select);
        }
        .... 
        ....

    resource/Categorydesc.php
    Codice PHP:
    class Resource_Categorydesc extends Zend_Db_Table_Abstract
    {
        protected 
    $_name 'category_description';
        protected 
    $_primary = array('category_id','langage_id');

        protected 
    $_referenceMap = array(
            
    'CategoryDesc' => array(
                
    'columns' => 'category_id',
                
    'refTableClass' => 'Resource_Category',
                
    'refColumns' => 'category_id',
            )
        );

    Catalog.php
    Codice PHP:
    class Catalog
    {

        public function 
    getCategoryByIdent($ident)
        {
            
    $category = new Resource_Category();
            return 
    $this->category->getCategoryByIdent($ident);
        }
        ....
        ....

    --- [color= darkorange]L'uomo è il computer più straordinario di tutti [/color]----

    http://www.simogrima.com

    Grifone

  5. #5
    si certo, potrebbe essere il modo corretto, anche se chiaramente moltissimo dipende da cosa devi sviluppare e dal contesto in cui questi oggetti "vivono". Ad ogni modo, dal punto di vista del framework, mi sembra un approccio che possa andare

  6. #6
    Grazie... continuo in questa direzione
    --- [color= darkorange]L'uomo è il computer più straordinario di tutti [/color]----

    http://www.simogrima.com

    Grifone

  7. #7

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.