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=.