2015-07-10 47 views
0

首先,我只想提一下,這根本不是一個「問題」。用Doctrine DBAL刪除不是問題,我可以做到這一點。用Doctrine DBAL一次刪除多行,有可能嗎?

我真正想知道的是,如果有辦法一次刪除多行,而不必循環例如數組。

對於項目中,我使用SilexDoctrine DBAL

這裏去一個例子,我現在要做的事:

$toDelete = array(1,2,3,4); 

foreach($toDelete as $id){ 
    $this->app['db']->delete('table_name',array('id' => $id)); 
} 

有沒有方法來避免循環?

+0

或許這有助於:http://doctrine-orm.readthedocs.org/en/latest/ reference/batch-processing.html#bulk-deletes – iVenGO

+1

DBAL支持WHERE id IN(?)和一個ID數組:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/數據檢索和-manipulation.html#列表的參數轉換 – Cerad

回答

1

可以使用的參數列表:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#list-of-parameters-conversion

$connection->executeQuery('DELETE FROM table_name WHERE id IN (?)', 
    array(array(1,2,3,4)), 
    array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY) 
); 

或查詢生成器:

$builder = $connection->createQueryBuilder() 
    ->delete('table_name') 
    ->where('id in (:ids)') 
    ->setParameter(':ids', array(array(1,2,3,4)), Connection::PARAM_INT_ARRAY); 
$builder->execute(); 
0

不是沒有寫你自己的查詢。

$app["db"](假設默認的silex/doctrine設置)是一個學說連接,所以你有可能執行你想要的任何查詢。