jburns, if you set your debug level to 2 you will see that performs 2
queries AND gets a bunch of data I don't need about the item...

grigri that is very helpful to know that updateAll doesn't escape your
arguments.

I don't need to afterSave currently, but it is good to know I can do it the
second way as well.

Thank you very much.

On Fri, Nov 20, 2009 at 9:45 AM, grigri <j...@hendersonwebdesign.com> wrote:

> It's possible in two ways.
>
> First, you've got the `updateAll` function which doesn't escape or
> mess with your arguments:
>
> $this->Item->updateAll(
>  array('Item.flags' => 'Item.flags + 1'),
>  array('Item.id' => 666)
> );
>
> One possible problem with this is that it will not call `afterSave`,
> trigger behaviour methods, etc... because it's not really a save.
> If you need this to work with the rest, the solution is a bit more
> long-winded:
>
> $db =& ConnectionManager::getDataSource($this->Item->useDbConfig);
> $this->Item->set('flags', $db->expression('`Item`.`flags`+1'));
> $this->Item->save();
>
> In reality, accessing the datasource and whatnot should be hidden in
> the model, but this shows a bare-bones way of getting it working.
>
> hth
> grigri
>
> On Nov 20, 12:46 pm, Dave <davidcr...@gmail.com> wrote:
> > Hi everybody,
> >
> > I have a quick question that bugs me each time I run into it in a
> project,
> > and then I promptly forget about it.  It is an easy fix, but it is such
> > common functionality that I feel there must be some way to do it within
> > built in functions rather then a custom query.
> >
> > The issue is incrementing a table field without grabbing the previous
> value,
> > using MySQL's default function `tablefield` = `tablefield` + 1 .
> >
> > example:
> >
> > $this->Item->query('UPDATE `items` SET `flags` = `flags`+1 WHERE
> > `items`.`id` = ' . $id);
> >
> > I have tried pretty much every way I can think of with model->saveField
> to
> > accomplish this through cake, but I can't get it to work.
> >
> > First I set the id with $this->Item->id = $id
> > After that I have tried
> >
> > $this->Item->saveField('flags','+1');
> > $this->Item->saveField('flags',' +1');
> > $this->Item->saveField('flags', 'flags+1');
> > $this->Item->saveField('flags', '`flags`+1');
> >
> > So... is there a way to do this with 1 query within cake? I like to have
> as
> > few custom queries as possible within my application.
> >
> > Thanks for any tips,
> >
> > who knows, if it isn't built in maybe I will be able to make my first
> > contribution to the Core!
> >
> > Dave
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "CakePHP" group.
> To post to this group, send email to cake-...@googlegroups.com.
> To unsubscribe from this group, send email to
> cake-php+unsubscr...@googlegroups.com<cake-php%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/cake-php?hl=.
>
>
>

--

You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-...@googlegroups.com.
To unsubscribe from this group, send email to 
cake-php+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=.


Reply via email to