Tuesday, March 1, 2011

Re: Join Table being wiped.

Hi Cricket

Thanks for your help, you've pointed me in the right direction so I'll
close this off and make a new request for assistance with a more valid
title.

I think SortableBehaviour might actually be what I need (though I'll
be brutally honest I'm a newbie and cannot see how to implement it!),
but for the sake of learning, I'll also chase up this issue so I know
what to do next time.

Once again, thanks!

Adam.

On Mar 2, 5:51 am, cricket <zijn.digi...@gmail.com> wrote:
> On Mon, Feb 28, 2011 at 9:32 PM, adam_g2000 <a...@designcollective.co.nz> wrote:
> > Hi Guys,
>
> > I've got a HABTM relationship between subcategories and resources.
> > There is a resources_subcategories join table. I've written a method
> > on subcategories that changes the order field in a record by
> > decrementing it. It's a bit like the tree behaviour (which I may
> > resort to if I cannot get this to work).
>
> >        function up($id = null, $order = null) {
> >                if (!$id or !$order) {
> >                        $this->Session->setFlash(__('Invalid id or order number', true));
> >                        $this->redirect(array('action'=>'index'));
> >                }
> >                // Create an array of the image table contents of IDs and Orders.
> >                $conditions = array(
> >                                                'fields' => array('id','order'),
> >                                                'order' => 'Subcategory.order ASC'
> >                );
> >                $subcategories = $this->Subcategory->find('all', $conditions);
> >                // Set the direction for the image to travel (up)
> >                $delta = -1;
> >                // index = the array item you want to move
> >                // delta = the direction and number of spaces to move the item.
> >                $index = $order -1;
> >                $index2 = $index + $delta;
> >                // Move the elements in the array
> >                $temp_item = $subcategories[$index2]['Subcategory']['order'];
> >                $subcategories[$index2]['Subcategory']['order'] =
> > $subcategories[$index]['Subcategory']['order'];
> >                $subcategories[$index]['Subcategory']['order'] = $temp_item;
> >                // Write it all back to the database
> >                foreach ($subcategories as $subcategory):
> >                        $this->Subcategory->save($subcategory, false, array('id',
> > 'order'));
> >                endforeach;
> >                $this->redirect(array('action' => 'index'));
> >        }
>
> > This all works perfectly except for one thing. Each time this method
> > is run the entire contents of the join table is erased. I need an
> > idiot check. Can anyone see what it is I am doing wrong? Thanks in
> > advance for any help anyone can offer.
>
> There are (used to be?) situations where records are first removed
> upon saving. Something to do with associations. Reasons are hazy. But
> a couple of things stand out in your code. First, you're not calling
> create() before save().
>
> Second, the shuffling looks odd to me. $temp_item isn't a record, for
> example, but the order. Presumably an integer. Is this what you want?
>
> Anyway, have you seen SortableBehavior? Works for me.http://bakery.cakephp.org/articles/dardosordi/2008/07/29/sortablebeha...

--
Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions.


To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php

No comments: