2011-04-22 82 views
3

我正在使用symfony + doctrine,我想用联接执行删除查询。请参阅下面的代码我目前使用的工作正常。Symfony Doctrine_Query DELETE with INNER JOIN

$sql = 'DELETE a 
FROM a 
INNER JOIN b ON a.b_id = b.id 
WHERE b.c_id = :c_id'; 

$pdo = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh(); 
$stmt = $pdo->prepare($sql); 
$params = array('c_id' => $c_id); 
$stmt->execute($params); 

任何人都知道我怎么可以用做:

Doctrine_Core::getTable('a') 

或者

Doctrine_Query::create()->delete()->from('a') 

我有没有运气无论是。

我只是不想在我的应用程序中使用原始SQL。

回答

1

像这样的事情应该去做

Doctrine_Query::create() 
    ->delete('a a') 
    ->innerJoin('a.b b') 
    ->where('b.c_id = ?', $c_id) 
    ->execute() 
+0

感谢,但我仍然没有运气。也许我在我的查询形式中做错了什么,但是我使用Doctrine_Query很多,所以我不这么认为:语法错误或访问冲突... Doctrine_Connection-> exec('DELETE FROM player_card INNER JOIN player p2 ON p .player_id = p2.id WHERE(game_id =?)',array('21')) – captainclam 2011-04-25 13:52:09

+0

其实你知道我真的不那么在意这件事,所以我只打算使用我原来的原始SQL。 – captainclam 2011-04-25 13:53:04

+1

dql删除&更新不支持连接(http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#delete-queries) – Rob 2015-10-18 20:34:23