Hehe it is close to on the money.  I do appreciate your help.  The goal of
this question was to increment a value with 1 query.  You can do this with
MySQL with a simple query settings field = field + 1.  I was just wondering
if there was a way to do this within the core as usually your fields are
escaped in cake functions.  I have figured out my problem.  Thank you
though.

Dave

On Sat, Nov 21, 2009 at 12:39 AM, jburns <jeremybu...@me.com> wrote:

> You are right.
>
> Can I ask if you are using recursion and containable? If so, you can
> be very specific about what tables, records and fields are returned.
> I'm still fairly new with Cake but have realised that it is a good
> thing to implement these in AppModel and then I have complete control
> over data returned within my models and controller functions. It's a
> bit more work for me, but well worth it in the performance stakes.
>
> With recursion set at -1 you will only get records from the current
> table (in other words, no associated tables). When you want to bring
> in associations, increase recursive to 0 or more, then use contain to
> bring in the associations. You can specify fields from those
> associations too:
>
> $this->Post->contain = array(
>        'Author' => array(
>                'fields' => array ('id', 'first_name', 'last_name')
>        )
> );
>
> In your case, with recursion set at -1 you can call...
>
> $this->Post->read(array('title', 'Published'), 1);
> $this->Post->set(array(
>        'title' => 'New title',
>        'published' => false
> ));
> $this->Post->save();
>
> ...and this will only bring back the value of 'title' and 'published'
> in the record with an id of 1 and nothing else. That has to be right
> on the money, doesn't it?
>
>
> On Nov 20, 6:44 pm, Dave <davidcr...@gmail.com> wrote:
> > 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>
> <cake-php%2bunsubscr...@googlegroups.c om>
> > > .
> > > 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<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