プロジェクト

全般

プロフィール

Bug(バグ) #1382

完了

opDoctrineQuery::chooseConnection がトランザクションに対応していない

Shinichi Urabe さんが14年以上前に追加. 約14年前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2010-07-22
期日:
進捗率:

100%

予定工数:
3.6 で発生するか:
Yes
3.8 で発生するか:

説明

opDoctrineQuery::chooseConnection がトランザクションに対応していません。
select とその他のクエリの種類のみでコネクションの選択が行われているため、トランザクションを使用した場合、ORMでは、データの更新後、すぐに情報を取得しモデルを最新の状態にしますが、そのコネクションが異なるため、更新されていないデータを取得、またはデータが取得できずに、モデルの中の状態がおかしなことになり、エラーが表示されることがあります。

同じデータベースを参照する database.yml を書いて検証しました。

all:
  slave_1:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:dbname=testtest;host=localhost'
      username: root
      encoding: utf8
      attributes: { 164: true }
      priority: 2
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:dbname=testtest;host=localhost'
      username: root
      encoding: utf8
      attributes: { 164: true }
      priority: 2

クエリが実行される前に 接続先をログに出力するように変更し、ログを取得しました。

 7月 21 22:27:55 symfony [debug] con:doctrine
 7月 21 22:27:55 symfony [info] {Doctrine_Connection_Statement} execute : UPDATE member_profile SET value = ? WHERE id = ? - (2, 2400)
 7月 21 22:27:55 symfony [debug] con:slave_1
 7月 21 22:27:55 symfony [debug] con:slave_1
 7月 21 22:27:55 symfony [info] {Doctrine_Connection_Statement} execute : SELECT m.id AS m__id, m.member_id AS m__member_id, m.profile_id AS m__profile_id, m.profile_option_id AS m__profile_option_id, m.value AS m__value, m.value_datetime AS m__value_datetime, m.public_flag AS m__public_flag, m.tree_key AS m__tree_key, m.lft AS m__lft, m.rgt AS m__rgt, m.level AS m__level, m.created_at AS m__created_at, m.updated_at AS m__updated_at FROM member_profile m WHERE (m.id = ?) LIMIT 1 - (2400)

関連するチケット 2 (0件未完了2件完了)

関連している OpenPNE 3 - Backport(バックポート) #1412: opDoctrineQuery::chooseConnection がトランザクションに対応していないFixed(完了)Shinichi Urabe2010-07-22

操作
関連している OpenPNE 3 - Backport(バックポート) #1970: opDoctrineQuery::chooseConnection がトランザクションに対応していないFixed(完了)Minoru Takai2010-07-22

操作

他の形式にエクスポート: Atom PDF