Thank you Bill for this detailed answer.
I'll implement the solution you suggest.


Bill Karwin wrote:
> 
> 
> Guillaume Oriol wrote:
>  > I wonder why the developpers of Zend_Db component choose the class  
> name
>  > instead of  column name in the reference map of a Zend_Db_Table  
> object?
> 
> I designed and implemented the table-relationships feature.  The  
> answer to your question of "why" is that the reference map is to help  
> the Zend_Db_Table_Row object to instantiate related Table objects.  It  
> has nothing to do with designing custom SQL queries.  You are using  
> the $_referenceMap in a manner other than what it was designed for.
> 
> You could just as easily say, "I want to hammer in a nail.  I have a  
> screwdriver, but it has a tip that isn't flat or blunt, so it's hard  
> to use for nailing.  I wonder why the screwdriver was designed this  
> way?"
> 
> That's not to say that what you are doing is in any way wrong.   
> Hammering nails is a fine thing to do in many circumstances.  It's  
> just that the $_referenceMap doesn't contain the information to help  
> you, so it's not the right tool.
> 
>  > I need to build dynamically my joins in a findBy* method and try to  
> build them
>  > from the existing reference map. But to do so, I need the  
> referenced table name,
>  > not the table class name. As the $_referenceMap only contains the  
> table class
>  > name, I am obliged to instantiate the class just to get its table  
> name! Is there
>  > a better way to do so?
> 
> The $_referenceMap is simply a PHP associative array.  You can add  
> elements to it and use them in your custom methods.
> 
>    protected $_referenceMap = array(
>      'Bug' => array(
>        'columns'           => array('bug_id'),
>        'refTableClass'     => 'Bugs',
>        'refColumns'        => array('bug_id'),
>        // You can add a custom array element for example:
>        'guillaume_table_name'    => 'bugs_tbl',
>      )
>    );
> 
> You can use whatever string you want as the array key.  The above is  
> just an example.  Zend_Db_Table_Row_Abstract expects some array keys,  
> that that are documented, but you can create other keys in the same  
> array too.
> 
> Another solution is to name your Table classes the same as the  
> database tables they represent.  This is the default, by the way.   
> Only if you declare a Table class including the $_name attribute does  
> it use that name instead of the name of the class.
> 
>    class bugs extends Zend_Db_Table_Abstract
>    {
>      // no need to declare $_name if the class name is the same as the  
> table name
>    }
> 
> Note that if you do this, your table name should conform to PEAR class  
> naming conventions.  E.g. a class named "bugs_tbl" should be defined  
> in file bugs/tbl.php.
> 
> Regards,
> Bill Karwin
> 
> 


-----
Guillaume ORIOL
Sofware architect
Technema
-- 
View this message in context: 
http://www.nabble.com/class-name-instead-of-table-name-in-reference-map-%28Zend_Db%29-tp19860024p19872857.html
Sent from the Zend Framework mailing list archive at Nabble.com.

Reply via email to