php - 使用 LEFT JOIN 的 Doctrine 2 UPDATE

标签 php doctrine-orm

SELECT - 好的,没有错误

$em = $this->get('doctrine.orm.entity_manager');

$query = $em->createQuery("
    SELECT c
    FROM MyDemoBundle:Category c
    LEFT JOIN c.projects p
    WHERE c.isActive = true
    AND p.id = 1
");
$result = $query->getResult();

更新 - 异常 [语义错误]

$query = $em->createQuery("
    UPDATE MyDemoBundle:Category c
    LEFT JOIN c.projects p
    SET c.isActive = false
    WHERE p.id = ?1
");
$query->setParameter(1, $id);
$query->execute();

最佳答案

LEFT JOIN,特别是 JOIN 只在 MySQL 的 UPDATE 语句中受支持。 DQL 抽象了通用ansi sql 的一个子集,所以这是不可能的。尝试使用子选择:

UPDATE MyDemoBundle:Category c SET c.isActive = false WHERE ?1 MEMBER OF c.projects;

(MEMBER OF 在这里实际上变成了子选择)。我不是 100% 确定这是否有效,但它比加入更有可能。

关于php - 使用 LEFT JOIN 的 Doctrine 2 UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5594853/

相关文章:

php codeigniter 计算行数

symfony - 在 where 条件下的学说 ORM 计数数组集合

php - doctrine2 查询同花后的顺序

php - Doctrine 自定义水化器与 Zend Framework 2 - 如何在配置文件中指定?

php - 可以使用 PHP/MySQL 在多个类别中列出相同的项目吗?

php - 仅当从 PHP 插入时特殊字符才能正确显示

javascript - 使用ajax重新加载wordpress php部分

php - 检查方法是否存在于扩展类中但不存在于父类中

doctrine-orm - doctrine 2 oracle datetime 列在插入实体上显示 "not a valid month"

symfony - easyadmin symfony Doctrine 中的列表数组/集合问题