プロジェクト

全般

プロフィール

Bug(バグ) #3338

Doctrine のサブクエリの中でエイリアスを指定した場合に正しくないSQLが発行される場合がある

Yuya Watanabeほぼ11年前に追加. 約4年前に更新.

ステータス:
New(新規)
優先度:
Normal(通常)
担当者:
-
対象バージョン:
開始日:
2013-05-07
期日:
進捗率:

0%

3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

概要

下記のようなコードを実行したとする.

$q = Doctrine_Core::getTable('MemberConfig')->createQuery('c');
$q->andWhere('c.member_id IN (SELECT m.id FROM Member m WHERE m.id = "1")');
$q->execute();

生成されるSQLは下記のようなもの.

SELECT m.id AS m__id, m.member_id AS m__member_id, m.name AS m__name, m.value AS m__value, m.value_datetime AS m__value_datetime, m.name_value_hash AS m__name_value_hash, m.created_at AS m__created_at, m.updated_at AS m__updated_at FROM member_config m WHERE (m.member_id IN (SELECT m2.id AS m2__id FROM member m2 WHERE (m2.id = "1")) AND (m2.is_active = ? OR m2.is_active IS NULL))

実行するとエラーが発生する.発行されるエラーは下記のようなもの.

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'm2.is_active' in 'where clause'

SQL の WHERE 句に着目するとサブクエリ内で定義していた Member m が m2 に変わり, AND でつながっている部分でこの m2 が指定されているがサブクエリの外側となっているため m2 が見つからない様子.

(m.member_id IN (SELECT m2.id AS m2__id FROM member m2 WHERE (m2.id = "1")) AND (m2.is_active = ? OR m2.is_active IS NULL))

関連するチケット

関連している OpenPNE 3 - Bug(バグ) #3135: サブクエリのWHERE節に「field IN ?」の形式のDQLがあると Invalid parameter number エラーが発生する New(新規) 2012-07-27

履歴

#2 kaoru n約7年前に更新

  • 対象バージョンOpenPNE 3.9.0-old から OpenPNE 3.9.0 に変更

#3 kaoru n約4年前に更新

  • 対象バージョンOpenPNE 3.9.0 から OpenPNE 3.10.x に変更

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