People are so lazy these days that they cant even search the group
before asking the question for the 10th time...
On 4/30/08, daphonz <[EMAIL PROTECTED]> wrote:
>
> Yes. You can use the "with" setting in your HABTM many model setup
> for this. For example, in your foo model, you can sort your HABTM
> entries by a unique ordering stored in the join table:
>
> class FooModel extends AppModel {
> var $hasAndBelongsToMany = array('Bar' =>
> array('className' => 'Bar',
> 'with'=>'BarredFoo',
> 'joinTable' => 'bar_foo',
> 'foreignKey' => 'foo_id',
> 'associationForeignKey'=>
> 'bar_id',
> 'conditions' => '',
> 'order' =>
> array('BarredFoo.ordering'=>'ASC'),
> 'limit' => '',
> 'unique' => true,
> 'finderQuery' => '',
> 'deleteQuery' => '',
> )
> }
>
> Here the model, "BarredFoo," is a model defined as such:
>
> <?php
> class BarredFoo extends AppModel
> {
> var $name = 'BarredFoo';
> var $useTable = 'bar_foo';
>
> }
> ?>
>
> To save extra data to the jointable, you can use a custom SQL query.
> You can make functions in your new join Model:
> <?php
> class BarredFoo extends AppModel
> {
> var $name = 'BarredFoo';
> var $useTable = 'bar_foo';
>
> function updateOrdering($associated_id,$content_id,$ordering) {
> $content_key = 'foo_id';
> $associated_key = 'bar_id';
> return $this->query("UPDATE `".$this->useTable."`
> SET `".$associated_key."`='".$associated_id."', `".$content_key."`='".
> $content_id."', `ordering`='".$ordering."' WHERE `".$associated_key."`
> = '".$associated_id."' AND `".$content_key."` = '".$content_id."';");
> }
>
> }
> ?>
>
> And you can call this function in the afterSave callback in your
> initial model:
>
> <?php
> class FooModel extends AppModel {
> var $hasAndBelongsToMany = array('Bar' =>
> array('className' => 'Bar',
> 'with'=>'BarredFoo',
> 'joinTable' => 'bar_foo',
> 'foreignKey' => 'foo_id',
> 'associationForeignKey'=>
> 'bar_id',
> 'conditions' => '',
> 'order' =>
> array('BarredFoo.ordering'=>'ASC'),
> 'limit' => '',
> 'unique' => true,
> 'finderQuery' => '',
> 'deleteQuery' => '',
> )
>
> function afterSave()
> {
> if (isset($this->data['Bar']['Bar'][0])) {
> foreach ($this->data['Bar']['Bar'] as $key =>
> $bar_id) {
> $this->BarredFoo->updateOrdering($bar_id,$this-
> >id,$key);
> }
> }
> return true;
> }
> }
> ?>
>
> That's how I order my HABTM relationships, but obviously you could
> extend this ad absurdum.
>
> A good article to to read about basic With relationships is here:
> http://www.littlehart.net/atthekeyboard/2007/09/04/a-glimpse-inside-cakephp-12/
>
> Hope this helps,
>
> Casey
>
> On Apr 30, 9:24 am, grigri <[EMAIL PROTECTED]> wrote:
> > For retrieval, this is easy: just add the extra columns to the join
> > table; you can optionally create a model file for the join if you need
> > to. Do a debug() on the fetched data array and you'll see all the
> > extra fields in there.
> >
> > It's putting the extra data in there easily that's more complicated -
> > the normal form helper / model __saveMulti() combo don't play nicely
> > with extra fields, afaik.
> >
> > On Apr 30, 1:23 pm, tgies <[EMAIL PROTECTED]> wrote:
> >
> > > foo HABTM bar, but I also need to store some specific information
> > > about that association -- say, a user HABTM groups, but each user also
> > > has a role within that group and a date of joining that group which I
> > > need to store in the foos_bars table. How do I get CakePHP to clue
> > > into this and pull out that information from the foos_bars table?
> >
>
--
Marcin Domanski
http://kabturek.info
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---