Thursday, 22 August 2013

Record synchronization issue in Doctrine 1.2.4

Record synchronization issue in Doctrine 1.2.4

I have run through an unexpected behaviour while using Doctrine 1.2.4 with
Symfony: accessing the records via the getters did not lead to the same
result as shooting a query to retrieve these same records. Here is how it
goes:
I am working with two tables: a tpTrip table, on which we perform
actions(= status changes), and a tpTripActivity table, that keeps track of
all the actions that have been performed on the trip. tpTrip has a one to
many relationship pointing to tpTripActivity.
At some point, I wanted to know if a "CheckIn" action had been performed
on a tpTrip record. So in my Doctrine tpTrip class, I wrote the (naive)
method:
public function has_been_checked_in()
{
foreach($this->getActivities() as $activity)
{
if($activity->getAction() == "CheckIn") return true;
}
return false;
}
Now after some frustrations, observing that a recently performed CheckIn
action was not turning up in my results, I wrote the following function,
which I would expect to do the same:
public function has_been_checked_in2()
{
$total = Doctrine_Core::getTable("tpTripActivity")->createQuery("a")
->select("count(*)")
->where("trip_id = ?", $this->getId())
->andWhere("action = ?", "CheckIn")
->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR);
return ($total > 0);
}
In this second version, I could get consistent results.
So my question is: Why do I not get the same results with the two
functions ? How can I make sure that my records are up to date when I use
my foreign key getters ?

No comments:

Post a Comment