0

クエリを作成すると、教義によって「()」が自動的に削除されました。

これが私のクエリです:

$query = MstFontTable::getInstance()->createQuery('msf');
$query->where('(full_font_name LIKE ? OR
                full_font_name LIKE ? OR
                full_font_name LIKE ? OR
                full_font_name = ? OR
                font_name = ?)', array(trim($fontName) . ',%',
                                       '%,' . trim($fontName),
                                       '%,' . trim($fontName) . ',%',
                                       trim($fontName),
                                       trim($fontName)
                                      )
             );
$query->andWhere('((tenant_id = 0 OR tenant_id = ?))', array(intval($tenantId)));

$query->getDql() を使用した場合の結果は次のとおりです。

FROM MstFont msf WHERE (full_font_name LIKE ? OR
                full_font_name LIKE ? OR
                full_font_name LIKE ? OR
                full_font_name = ? OR
                font_name = ?) AND ((tenant_id = 0 OR tenant_id = ?))

$query->getSqlQuery() を使用した場合の結果は次のとおりです。

SELECT m.font_id AS m__font_id, m.tenant_id AS m__tenant_id, m.font_name AS m__font_name, m.font_file AS m__font_file, m.font_category AS m__font_category, m.vendor AS m__vendor, m.full_font_name AS m__full_font_name, m.font_name_ap AS m__font_name_ap FROM mst_font m WHERE (m.full_font_name LIKE ? OR
                full_font_name LIKE ? OR
                full_font_name LIKE ? OR
                full_font_name = ? OR
                font_name = ? AND (m.tenant_id = 0 OR m.tenant_id = ?))

この問題の説明を手伝ってくれる人はいますか?

4

1 に答える 1

0

次のように余分な括弧を削除してみてください。

$query->andWhere('((tenant_id = 0 OR tenant_id = ?))', array(intval($tenantId)));

$query->andWhere('tenant_id = 0 OR tenant_id = ?', array(intval($tenantId)));

次のように、最初のものにも同じことを行います。

$query->where('(full_font_name LIKE ? OR ...

$query->where('full_font_name LIKE ? OR ...

そして何が起こるか見てください。それらは必要ありません。Doctrine はそれらおよび/または条件に括弧を付けます。

于 2012-11-23T18:30:57.227 に答える