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.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.
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=.


Reply via email to