How to add a M-N relationship via vardefs?

I am trying to add a relationship between a custom module (Mass Interactions) and EmailAddresses, and to so in such a way that it won't need to be redone in v7.5.x when we go there.

The examples I can find are all 1-M and not N-M.

in 

custom/Extension/modules/massi_Mass_Interactions/Vardefs
I added the non-db link field and the relationship:
<?php
$dictionary["massi_Mass_Interactions"]["fields"]["email_addr"] = array (
  'name' => 'email_addr',
  'type' => 'link',
  'relationship' => 'massi_email_addr_rel',
  'source' => 'non-db',
  'vname' => 'LBL_MASSI_EMAIL_ADDR_REL_FROM_EMAILADDR_TITLE',
);
$dictionary["massi_Mass_Interactions"]["relationships"]["massi_email_addr_rel"] = array(
        'lhs_module'=> 'massi_Mass_Interactions'
      , 'lhs_table'=> 'massi_mass_interactions'
      , 'lhs_key' => 'id'
      , 'rhs_module'=> 'EmailAddresses'
      , 'rhs_table'=> 'email_addresses'
      , 'rhs_key' => 'id'
      , 'relationship_type'=>'many-to-many'
      , 'join_table'=> 'email_addr_massi_rel'
      , 'join_key_lhs'=>'mass_interaction_id'
      , 'join_key_rhs'=>'email_address_id'
);
?>


 


and in custom/Extension/modules/EmailAddresses/Ext/Vardefs/vardefs.ext.php 

<?php
$dictionary["EmailAddresses"]["fields"]["massi_mass_interactions"] = array (
  'name' => 'massi_mass_interactions',
  'type' => 'link',
  'relationship' => 'massi_email_addr_rel',
  'source' => 'non-db',
  'vname' => 'LBL_MASSI_EMAIL_ADDR_REL_FROM_MASSI_TITLE',
);
?>


  I ran repair/rebuild but it's not prompting to create the relationship table, do I need to do that in sql? Am I missing something?. 

thanks,


Francesca

PS. I know all about campaigns & targets, we just don't want these in campaigns or targets; and I know I could use a Person template to create my Mass Interactions module and put all these relationships in email_addr_bean_rel but I'd like to keep them separate and not load up that table.

thanks,


FrancescaS
Parents
  • Come to think of it, the code should create the relationship table for me...

    I tried following this:
    http://forums.sugarcrm.com/f3/creating-many-many-relationship-between-documents-campaigns-sugar-ce-6...

    but no luck, the table is not being created.
    I would expect to see SQL that needs to be executed when I run a repair/rebuild and/or repair-relationships

    I generally use studio but EmailAddresses is not available from studio...
    Any clues?

    thanks
    FrancescaS

  • Got it to work

    I started from scratch, ignoring the code originally posted and created:
    custom/metadata/massi_mass_interactions_email_addressesMetaData.php

                   

    <?php

     

    $dictionary["massi_mass_interactions_email_addresses"] = array (

     

      'relationships' =>

     

      array (

     

        'massi_mass_interactions_emailaddresses' =>

     

        array (

     

          'lhs_module' => 'massi_Mass_Interactions',

     

          'lhs_table' => 'massi_mass_interactions',

     

          'lhs_key' => 'id',

     

          'rhs_module'=> 'EmailAddresses',

     

          'rhs_table'=> 'email_addresses',

     

          'rhs_key' => 'id',

     

          'relationship_type' => 'many-to-many',

     

          'join_table' => 'massi_mass_interactions_email_addresses',

     

          'join_key_lhs' => 'massi_id',

     

          'join_key_rhs' => 'emailaddr_id',

     

        ),

     

      ),

     

      'table' => 'massi_mass_interactions_email_addresses',

     

      'fields' =>

     

      array (

     

        0 =>

     

        array (

     

          'name' => 'id',

     

          'type' => 'varchar',

     

          'len' => 36,

     

        ),

     

        1 =>

     

        array (

     

          'name' => 'date_modified',

     

          'type' => 'datetime',

     

        ),

     

        2 =>

     

        array (

     

          'name' => 'deleted',

     

          'type' => 'bool',

     

          'len' => '1',

     

          'default' => '0',

     

          'required' => true,

     

        ),

     

        3 =>

     

        array (

     

          'name' => 'massi_id',

     

          'type' => 'varchar',

     

          'len' => 36,

     

        ),

     

        4 =>

     

        array (

     

          'name' => 'emailaddr_id',

     

          'type' => 'varchar',

     

          'len' => 36,

     

        ),

     

      ),

     

      'indices' =>

     

      array (

     

        array (

     

          'name' => 'massi_emailaddrpk',

     

          'type' => 'primary',

     

          'fields' => array ('id'),

     

        ),

     

        array (

     

          'name' => 'idx_massi_emailaddr_massi',

     

          'type' => 'index',

     

          'fields' => array ( 'massi_id'),

     

        ),

     

        array (

     

          'name' => 'idx_massi_emailaddr_emailaddr',

     

          'type' => 'index',

         'type' => 'index',

                     

          'fields' => array ( 'emailaddr_id'),

     

        ),

     

        array (

     

          'name' => 'idx_massi_emailaddr_id',

     

          'type' => 'alternate_key',

     

          'fields' => array ( 'massi_id', 'emailaddr_id'),

     

        ),

     

        array (

     

          'name' => 'idx_emailaddr_massi_id',

     

          'type' => 'alternate_key',

     

          'fields' => array ( 'emailaddr_id', 'massi_id'),

     

        ),

     

      ),

     

    );

    and in
                   

    custom/Extension/application/Ext/TableDictionary/massi_mass_interactions_email_addresses.php

                   

    <?php

                     

    include('custom/metadata/massi_mass_interactions_email_addressesMetaData.php');

     

    ?>

    repair rebuild prompted me to create the table

    FrancescaS

Reply
  • Got it to work

    I started from scratch, ignoring the code originally posted and created:
    custom/metadata/massi_mass_interactions_email_addressesMetaData.php

                   

    <?php

     

    $dictionary["massi_mass_interactions_email_addresses"] = array (

     

      'relationships' =>

     

      array (

     

        'massi_mass_interactions_emailaddresses' =>

     

        array (

     

          'lhs_module' => 'massi_Mass_Interactions',

     

          'lhs_table' => 'massi_mass_interactions',

     

          'lhs_key' => 'id',

     

          'rhs_module'=> 'EmailAddresses',

     

          'rhs_table'=> 'email_addresses',

     

          'rhs_key' => 'id',

     

          'relationship_type' => 'many-to-many',

     

          'join_table' => 'massi_mass_interactions_email_addresses',

     

          'join_key_lhs' => 'massi_id',

     

          'join_key_rhs' => 'emailaddr_id',

     

        ),

     

      ),

     

      'table' => 'massi_mass_interactions_email_addresses',

     

      'fields' =>

     

      array (

     

        0 =>

     

        array (

     

          'name' => 'id',

     

          'type' => 'varchar',

     

          'len' => 36,

     

        ),

     

        1 =>

     

        array (

     

          'name' => 'date_modified',

     

          'type' => 'datetime',

     

        ),

     

        2 =>

     

        array (

     

          'name' => 'deleted',

     

          'type' => 'bool',

     

          'len' => '1',

     

          'default' => '0',

     

          'required' => true,

     

        ),

     

        3 =>

     

        array (

     

          'name' => 'massi_id',

     

          'type' => 'varchar',

     

          'len' => 36,

     

        ),

     

        4 =>

     

        array (

     

          'name' => 'emailaddr_id',

     

          'type' => 'varchar',

     

          'len' => 36,

     

        ),

     

      ),

     

      'indices' =>

     

      array (

     

        array (

     

          'name' => 'massi_emailaddrpk',

     

          'type' => 'primary',

     

          'fields' => array ('id'),

     

        ),

     

        array (

     

          'name' => 'idx_massi_emailaddr_massi',

     

          'type' => 'index',

     

          'fields' => array ( 'massi_id'),

     

        ),

     

        array (

     

          'name' => 'idx_massi_emailaddr_emailaddr',

     

          'type' => 'index',

         'type' => 'index',

                     

          'fields' => array ( 'emailaddr_id'),

     

        ),

     

        array (

     

          'name' => 'idx_massi_emailaddr_id',

     

          'type' => 'alternate_key',

     

          'fields' => array ( 'massi_id', 'emailaddr_id'),

     

        ),

     

        array (

     

          'name' => 'idx_emailaddr_massi_id',

     

          'type' => 'alternate_key',

     

          'fields' => array ( 'emailaddr_id', 'massi_id'),

     

        ),

     

      ),

     

    );

    and in
                   

    custom/Extension/application/Ext/TableDictionary/massi_mass_interactions_email_addresses.php

                   

    <?php

                     

    include('custom/metadata/massi_mass_interactions_email_addressesMetaData.php');

     

    ?>

    repair rebuild prompted me to create the table

    FrancescaS

Children
No Data