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
-~----------~----~----~----~------~----~------~--~---