2012-11-23 86 views
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))); 

下面是結果,當我使用$查詢 - > 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 = ?)) 

下面是結果,當我使用$查詢 - > 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 = ?)) 

有沒有人幫我解釋一下這個問題?

回答

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會爲這些和/或條件放置括號。