0

私は Symfony 1.4 と Propel 1.4 で既存のプロジェクトを持っています

新しい要件については、次のコードを試しました。

static public function extendMomentoLock($momentoId,$memberId)
{
    $wherec = new Criteria();
    $updatec = new Criteria();

    $updatec->add(MomentoPeer::LOCKED, 1);
    $updatec->addAnd(MomentoPeer::LOCKEDBY, $memberId);
    $wherec->add(MomentoPeer::ID, $momentoId, Criteria::EQUAL);

    $con = Propel::getConnection(MemberPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
    BasePeer::doUpdate($wherec, $updatec, $con);

    return "extended";
}

予想どおり、ログから取得した正しいクエリが生成されました

UPDATE momento SET `LOCKED`=1, `LOCKEDBY`=6 WHERE momento.ID='198'

ここまでは問題ありません。

このクエリを 3 分ごとに実行する必要があるため、問題が発生します。ルールは、レコードが 5 分前に更新された場合、行は 5 分ごとに自動的にロック解除されます。ロックしたままにするには、updated_at列を 5 分未満にする必要があるため、ブラウザーはレコードをロックしたままにする要求を送信します。

updated_atクエリが列を更新することを期待していました。ただし、クエリでは何も更新されてupdated_atいないため、列は更新されていません。

レコードが更新されていない場合でも、propel に強制的にクエリを実行させる方法はありますか?

4

1 に答える 1

1

Timestampable 動作を使用していると思うので、行で変更が行われた場合にのみ日付フィールドが更新されます。

基本的な SQL ステートメントを使用して更新を強制できると思います。

$updatec->addAnd(MomentoPeer::UPDATED_AT, 'NOW()');
于 2012-10-01T14:33:24.613 に答える