Re: 3.0: Entity get/set mutators

2014-09-22 Thread Joe Theuerkauf
That did the trick. Small correction: _getActiveStatus worked for me in the 
Entity class, _activeStatus didn't display anything.

Thank you!
-joe


On Monday, 22 September 2014 04:42:23 UTC-4, José Lorenzo wrote:
>
> Don't use accessors for formatting your columns to be displayed in the 
> view. The accessors are meant to get the data as it should be saved in the 
> database. You can use instead a virtual field such as active_status:
>
> protected function _activeStatus() {
>  return $this->active ? 'Active' : 'Inactive';
> }
>
> echo $entity->active_status;
>
> On Sunday, September 21, 2014 11:45:33 PM UTC+2, Joe Theuerkauf wrote:
>>
>> i have several tables with an `active` column, and the Admin should be 
>> able to de/activate records to determine whether they & related records are 
>> available in the application.
>>
>> Instead of constantly converting T/F or 1/0 to "Active"/"Inactive", i 
>> wrote an Entity getter:
>>
>> protected function _getActive($active) {
>> return $active ? 'Active' : 'Inactive';
>> }
>>
>> That's been working pretty well. The Entity->active property always 
>> provides the string.
>>
>> The problem is updating the data:
>>
>> SomeTableController gets a request like */some_table/active/2/1* to set 
>> ID 2 "active" (1):
>>
>> public function active($id, $active) {
>> $entity = $this->SomeTable->get($id);
>> $entity->active = $active;
>>
>> if ($this->SomeTable->save($entity)) {
>> // Success!
>> }
>> else {
>> // Fail!
>> }
>> }
>>
>> The problem: save() reports a successful save, but the database isn't 
>> updated. Scratch that: the `modified` column is updated, but not the 
>> `active` flag.
>>
>> If i kill _getActive() the update works, but i lose the convenience of 
>> the string representation.
>>
>> My *guess* is, i need a setter to handle the switch, but i'm not sure 
>> exactly how they work. The documentation (
>> http://book.cakephp.org/3.0/en/orm/entities.html#Cake\ORM\Entity::set) 
>> for set mutators shows an example of setting some *other* entity 
>> property ('slug') using the 'title' property. But there's no example for 
>> mutating the property being called, and i don't know if that even makes 
>> sense...
>>
>> Along with no _setActive mutator, i also tried the following:
>>
>> protected function _setActive($active) {
>> // $this->set('active', $active); <-- Created loop condition & fatal 
>> error.
>>
>> $this->_properties['active'] = $active;
>> return $active;
>> }
>>
>> No luck. It does the same as no setter: updates the entity (with updated 
>> active & modified properties), but save() doesn't write the changed 
>> active property to the database.
>>
>> Any help? Thanks.
>> -joe t.
>>
>>

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.


Re: 3.0: Entity get/set mutators

2014-09-22 Thread José Lorenzo
Don't use accessors for formatting your columns to be displayed in the 
view. The accessors are meant to get the data as it should be saved in the 
database. You can use instead a virtual field such as active_status:

protected function _activeStatus() {
 return $this->active ? 'Active' : 'Inactive';
}

echo $entity->active_status;

On Sunday, September 21, 2014 11:45:33 PM UTC+2, Joe Theuerkauf wrote:
>
> i have several tables with an `active` column, and the Admin should be 
> able to de/activate records to determine whether they & related records are 
> available in the application.
>
> Instead of constantly converting T/F or 1/0 to "Active"/"Inactive", i 
> wrote an Entity getter:
>
> protected function _getActive($active) {
> return $active ? 'Active' : 'Inactive';
> }
>
> That's been working pretty well. The Entity->active property always 
> provides the string.
>
> The problem is updating the data:
>
> SomeTableController gets a request like */some_table/active/2/1* to set 
> ID 2 "active" (1):
>
> public function active($id, $active) {
> $entity = $this->SomeTable->get($id);
> $entity->active = $active;
>
> if ($this->SomeTable->save($entity)) {
> // Success!
> }
> else {
> // Fail!
> }
> }
>
> The problem: save() reports a successful save, but the database isn't 
> updated. Scratch that: the `modified` column is updated, but not the 
> `active` flag.
>
> If i kill _getActive() the update works, but i lose the convenience of 
> the string representation.
>
> My *guess* is, i need a setter to handle the switch, but i'm not sure 
> exactly how they work. The documentation (
> http://book.cakephp.org/3.0/en/orm/entities.html#Cake\ORM\Entity::set) 
> for set mutators shows an example of setting some *other* entity property 
> ('slug') using the 'title' property. But there's no example for mutating 
> the property being called, and i don't know if that even makes sense...
>
> Along with no _setActive mutator, i also tried the following:
>
> protected function _setActive($active) {
> // $this->set('active', $active); <-- Created loop condition & fatal 
> error.
>
> $this->_properties['active'] = $active;
> return $active;
> }
>
> No luck. It does the same as no setter: updates the entity (with updated 
> active & modified properties), but save() doesn't write the changed active 
> property to the database.
>
> Any help? Thanks.
> -joe t.
>
>

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.


3.0: Entity get/set mutators

2014-09-21 Thread Joe Theuerkauf
i have several tables with an `active` column, and the Admin should be able 
to de/activate records to determine whether they & related records are 
available in the application.

Instead of constantly converting T/F or 1/0 to "Active"/"Inactive", i wrote 
an Entity getter:

protected function _getActive($active) {
return $active ? 'Active' : 'Inactive';
}

That's been working pretty well. The Entity->active property always 
provides the string.

The problem is updating the data:

SomeTableController gets a request like */some_table/active/2/1* to set ID 
2 "active" (1):

public function active($id, $active) {
$entity = $this->SomeTable->get($id);
$entity->active = $active;

if ($this->SomeTable->save($entity)) {
// Success!
}
else {
// Fail!
}
}

The problem: save() reports a successful save, but the database isn't 
updated. Scratch that: the `modified` column is updated, but not the 
`active` flag.

If i kill _getActive() the update works, but i lose the convenience of the 
string representation.

My *guess* is, i need a setter to handle the switch, but i'm not sure 
exactly how they work. The documentation 
(http://book.cakephp.org/3.0/en/orm/entities.html#Cake\ORM\Entity::set) for 
set mutators shows an example of setting some *other* entity property 
('slug') using the 'title' property. But there's no example for mutating 
the property being called, and i don't know if that even makes sense...

Along with no _setActive mutator, i also tried the following:

protected function _setActive($active) {
// $this->set('active', $active); <-- Created loop condition & fatal 
error.

$this->_properties['active'] = $active;
return $active;
}

No luck. It does the same as no setter: updates the entity (with updated 
active & modified properties), but save() doesn't write the changed active 
property to the database.

Any help? Thanks.
-joe t.

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.