Symfony で Doctrine 1.2.4 を使用しているときに予期しない動作に遭遇しました: getter を介してレコードにアクセスしても、これらの同じレコードを取得するためにクエリを実行した場合と同じ結果にはなりませんでした。方法は次のとおりです。
私は 2 つのテーブルを使用しています。アクション (= ステータス変更) を実行する tpTrip テーブルと、トリップで実行されたすべてのアクションを追跡する tpTripActivity テーブルです。tpTrip には、tpTripActivity を指す 1 対多の関係があります。
ある時点で、tpTrip レコードに対して「CheckIn」アクションが実行されたかどうかを知りたいと思いました。そこで、私の Doctrine tpTrip クラスで、(単純な) メソッドを書きました:
public function has_been_checked_in()
{
foreach($this->getActivities() as $activity)
{
if($activity->getAction() == "CheckIn") return true;
}
return false;
}
最近実行された CheckIn アクションが結果に表示されないことにいくつかの不満を感じた後、次の関数を作成しました。これは同じことを期待します。
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);
}
この 2 番目のバージョンでは、一貫した結果を得ることができました。
だから私の質問は: 2 つの関数で同じ結果が得られないのはなぜですか? 外部キー ゲッターを使用するときに、レコードが最新であることを確認するにはどうすればよいですか?