I'm running Phalcon 1.3.3 on Windows (x64, VC9)
I've written mock code below that can explain better than I can with words.
Basically for some reason updating a model attribute (belongsTo()) that is within an if statement (for the same attribute), will not work.
save() returns true; there's no messages against the model, and the if statement code block is 10000% definitely executing.
Can anyone explain this? MySQL logging is showing that for some reason an Update query is executing against the status object itself, instead of Example object...
class Example extends \Phalcon\Mvc\Model
{
public $id;
public $status_id;
public function initialize()
{
$this->belongsTo('status_id', '\Status', 'id', array('foreignKey' => true, 'alias' => 'status'));
}
public function accept1()
{
//Fetching this model relationship record is somehow not allowing me to update the status/status_id...
//Update the $status_id var with the ID directly does not work either
if($this->status->name === 'Pending'){
$this->status = \Status::findFirst(['name = ?0', 'bind' => ['Accepted']]);
}
}
public function accept2()
{
//This method works fine because of no if statement...
$this->status = \Status::findFirst(['name = ?0', 'bind' => ['Accepted']]);
}
}
/* EXAMPLE 1 - NOT WORKING */
$example1 = \Example::findFirst(); //id: 1, status: (Pending)
$example1->accept1();
$example1->save();
echo $example1->status->name."\n\n"; //Will be 'Accepted' - but DB not actually updated.
echo \Example::findFirst()->status->name."\n\n"; //Will be 'Pending' ...
/* EXAMPLE 2 - WORKS */
$example2 = \Example::findFirst();
$example2->accept2();
$example2->save();
echo \Example::findFirst()->status->name; //WILL BE 'Active'... AS IT SHOULD
For now I'm just comparing $status_id; directly, so no relating object has to be fetched and I am able to update.