2012-12-16 91 views
1

我試着去實現與LEFT刪除代碼加入的Joomla 2.5:的Joomla 2.5與LEFT刪除查詢JOIN

$cid = JRequest::getVar('cid', array(), 'post', 'array'); 

$query = $db->getQuery(true); 

$query->delete($db->quoteName('table1').' AS t1'); 

$query->leftJoin($db->quoteName('table2'). 
' AS t2 ON t2.table_1_id = t1.id '); 

$query->where(array('t1.id IN ('. implode(',', $cid).')')); 

$db->setQuery($query); 

try { 
    $db->query(); 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

我得到的是:

DELETE FROM `table1` AS t1 
LEFT JOIN `table2` AS t2 ON t2.table_1_id = t1.id 
WHERE t1.id IN (48) 

這個SQL查詢是不正確。我需要的是:

DELETE t1.*,t2.* FROM `table1` AS t1 
LEFT JOIN `table2` AS t2 ON t2.table_1_id = t1.id 
WHERE t1.id IN (48) 

所以,我應該怎麼改變的Joomla查詢以獲得正確的SQL查詢?有任何想法嗎?

+0

嘗試鏈接 - >列(t1。*,t2。*)刪除很奇怪,因爲它顯然只放置表。 – Elin

+0

不,這也行不通。 – Bounce

+0

如果你做$ query-> delete()它會刪除整行。剛好在JTableUser $ query-> delete()中看到了這一點。查詢 - >從( '#__ user_usergroup_map'); – Elin

回答

2

我一直在Joomla工作很長時間了。根據我的Joomla知識,你無法完成你想要做的事$query->delete()。由於您的查詢有點棘手,因此可以使用下面的方法執行。

$db = JFactory::getDBO(); 
$query = "DELETE t1.*,t2.* FROM `table1` AS t1 
LEFT JOIN `table2` AS t2 ON t2.table_1_id = t1.id 
WHERE t1.id IN (48)"; // you can replace the line with array('t1.id IN ('. implode(',', $cid).')') 
$db->setQuery($query); 
$db->query(); 
+0

是的,我想我會堅持你的方法。事實上,它與Joomla v1.5中的做法一樣。無論如何,感謝您的幫助。 – Bounce

+0

是的,暫時就是我們所能做的。但我希望未來會有一個解決方案:-) – Techie