That works great. Much obliged.

On Sun, May 11, 2008 at 4:41 AM, David Christopher Zentgraf
<[EMAIL PROTECTED]> wrote:
>
>  Hi,
>
>  I have a similar setup, where a user has many Accounts, but also has a
>  default account.
>  My model looks like this:
>
>  class User extends AppModel {
>
>         var $name = 'User';
>
>         var $belongsTo = array(
>                         'DefaultAccount' => array(
>                                 'className'             => 'Account',
>                                 'foreignKey'    => 'default_account_id'
>                         )
>         );
>
>         var $hasMany = array(
>                         'Account' => array(
>                                 'className'             => 'Account',
>                                 'foreignKey'    => 'user_id',
>                                 'dependent'             => true
>                         )
>         );
>  }
>
>
>  I have the same again in Groups, with each group having an Admin user
>  but also many users:
>
>  class Group extends AppModel {
>
>         var $name = 'Group';
>
>         var $belongsTo = array(
>                         'Admin' => array(
>                                 'className'             => 'User',
>                                 'foreignKey'    => 'admin_id'
>                         )
>         );
>
>         var $hasAndBelongsToMany = array(
>                         'User' => array(
>                                 'className'             => 'User',
>                                 'joinTable'             => 'groups_users',
>                                 'foreignKey'    => 'group_id',
>                                 'associationForeignKey' => 'user_id',
>                                 'unique'                => true
>                         )
>         );
>  }
>
>  Works perfectly fine for me.
>
>  Hope that helps somewhat...
>  Chrs,
>  Dav
>
>
>
>  On 11 May 2008, at 06:59, b logica wrote:
>
>  >
>  > I have a model, Artist, that HABTM Discipline (eg. Visual Arts,
>  > Theatre, etc.) The client has decided that they want each artist to
>  > have a "primary" discipline. I've changed the model, then, to have one
>  > Discipline in belongsTo and added a discipline_id column to the DB. So
>  > far, so sort of good. However, updates on the model are not going so
>  > well because the HABTM array will always include the primary. I have
>  > some ideas for dealing with this but thought I'd see if anyone has run
>  > into this before.
>  >
>  > Here's what I have:
>  >
>  > Artist
>  >
>  > var $belongsTo = array('Discipline');
>  > var $hasAndBelongsToMany = array(
>  >       'Discipline' => array(
>  >               'with' => 'ArtistsDiscipline',
>  >               'className' => 'Discipline',
>  >               'joinTable' => 'artists_disciplines',
>  >               'foreignKey' => 'artist_id',
>  >               'associationForeignKey' => 'discipline_id',
>  >               'unique' => true
>  >       )
>  > );
>  >
>  > Initially, the Artist looks something like this:
>  >
>  > Array
>  > (
>  >    [Artist] => Array
>  >       (
>  >               [id] => 1
>  >               [created] => 2008-05-10 17:02:56.155567
>  >               [modified] => 2008-05-10 17:02:56.155567
>  >               [discipline_id] => 2
>  >                       // other stuff ...
>  >       )
>  >    [Discipline] => Array
>  >       (
>  >               [id] => 2
>  >               [name_en] => Visual Arts
>  >               [name_fr] => Arts Visuels
>  >               [name_es] => Artes Visuales
>  >               [0] => Array
>  >               (
>  >                       [id] => 3
>  >                       [name_en] => Film / Television
>  >                       [name_fr] => Cinéma / Télévision
>  >                       [name_es] => Cine / Televisión
>  >               )
>  >               [1] => Array
>  >               (
>  >                       [id] => 9
>  >                       [name_en] => Theatre
>  >                       [name_fr] => Théâtre
>  >                       [name_es] => Teatro
>  >               )
>  >       )
>  > )
>  >
>  > Already, the Discipine array looks like it needs some fixing. I figure
>  > I could do something in afterFind() here.
>  >
>  > The edit.ctp has:
>  >
>  > $form->label('Artist.discipline_id', __('* Primary Artistic
>  > Discipline', true), array('class' => 'Required'))
>  >
>  > $form->error('Artist.discipline_id', __('Please select a primary
>  > discipline', true)) ?>
>  > $form->select('Artist.discipline_id', $disciplines, null, array(),
>  > true)
>  >
>  > $form->label('Discipline.Discipline', __('Other Disciplines', true))
>  > $habtm->checkboxMultiple('Discipline.Discipline', $disciplines, null,
>  > array('class' => 'Required', 'multiple' => 'checkbox'))
>  >
>  >
>  > No surprises, the "Visual Arts" checkbox will be checked. After an
>  > update, the Discipline array looks like:
>  >
>  > [Discipline] => Array
>  > (
>  >       [id] => 2
>  >       [name_en] => Visual Arts
>  >       [name_fr] => Arts Visuels
>  >       [name_es] => Artes Visuales
>  >       [0] => Array
>  >       (
>  >               [id] => 2
>  >               [name_en] => Visual Arts
>  >               [name_fr] => Arts Visuels
>  >               [name_es] => Artes Visuales
>  >       )
>  >       [1] => Array
>  >       (
>  >               [id] => 3
>  >               [name_en] => Film / Television
>  >               [name_fr] => Cinéma / Télévision
>  >               [name_es] => Cine / Televisión
>  >       )
>  >       [2] => Array
>  >       (
>  >               [id] => 9
>  >               [name_en] => Theatre
>  >               [name_fr] => Théâtre
>  >               [name_es] => Teatro
>  >       )
>  > )
>  >
>  > So, I'm wondering what the best strategy would be. Should I modify
>  > this in Artist's afterFind() or Discipline's? And, if the latter, how
>  > can I get the Artist's discipline_id (so I can remove that entry from
>  > the array)? I thought about doing it in Artist's beforeSave() but then
>  > the primary will still always appear checked in the secondary group.
>  >
>  > I tried this in Artist's afterFind()
>  >
>  > /* Remove primary Discipline from list of secondaries, which
>  > * are indexed numerically.
>  > */
>  > if (isset($results[0]['Discipline']))
>  > {
>  >       foreach(array_keys($results[0]['Discipline']) as $key)
>  >       {
>  >               if (!is_numeric($key))
>  >               {
>  >                       unset($results[0]['Discipline'][$key]);
>  >               }
>  >       }
>  > }
>  >
>  > The problem with that is I need that to be able to display the name of
>  > the primary.
>  >
>  > Then I remembered that I can use an alias in $belongsTo:
>  >
>  > var $belongsTo = array(
>  >       'PrimaryDiscipline' => array(
>  >               'className'  => 'Discipline',
>  >               'conditions' => '',
>  >               'order'      => '',
>  >               'foreignKey' => 'discipline_id'
>  >       )
>  > );
>  >
>  > I thought that using PrimaryDiscipline would give me an array with
>  > that as a key (and the other as Discipline). But that leads to a
>  > failed DB query: SQL Error: ERROR:  missing FROM-clause entry for
>  > table "Discipline"
>  >
>  > My next thought was to remove the alias from $belongsTo but alter the
>  > array to include it in afterFind(). Aside from that, I'm out of ideas
>  > at this point. Anyone done this before?
>  >
>  > >
>
>
>  >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to