ًWhy you're not using *Increment Behavior*
http://bakery.cakephp.org/articles/view/increment-behavior ?!!

On Sat, Nov 21, 2009 at 11:52 AM, Dave <[email protected]> wrote:

> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]>
>> 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 <[email protected]> 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 [email protected].
>> > > To unsubscribe from this group, send email to
>> > > [email protected]<cake-php%[email protected]>
>> <cake-php%[email protected] 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 [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<cake-php%[email protected]>
>> .
>> 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 [email protected].
> To unsubscribe from this group, send email to
> [email protected]<cake-php%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/cake-php?hl=.
>



-- 
http://phpirate.net

--

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


Reply via email to