【问题标题】:Doctrine - SQL Query Builder - update and join?Doctrine - SQL Query Builder - 更新和加入?
【发布时间】:2017-10-10 10:03:37
【问题描述】:

我使用 Doctrine 的 SQL 查询生成器 (http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/query-builder.html)

并且想通过一个连接来做一个更新案例。我知道这里不支持加入。所以我这样做:

$query = $dbalQueryBuilder->update('s_articles_attributes', 'aa')
                    ->set('aa.fp_pos_days', ':days')
                    ->where('aa.articledetailsID IN (SELECT a.id FROM s_articles a WHERE a.supplierID IN (:supplierIds))')
                    ->setParameter('days', $days_string)
                    ->setParameter('supplierIds', $supplierIds)
                    ->execute();

$supplierIds 是string(39) "3,4,26,28,31,36,37,38,48,49,55,56,64,82"

当我运行这个查询时,什么也没有发生。当我这样做时:

$query = $dbalQueryBuilder->update('s_articles_attributes', 'aa')
                        ->set('aa.fp_pos_days', ':days')
                        ->where('aa.articledetailsID IN (SELECT a.id FROM s_articles a WHERE a.supplierID IN (3,4,26,28,31,36,37,38,48,49,55,56,64,82))')
                        ->setParameter('days', $days_string)
                        ->execute();

它工作正常。有人知道为什么吗?那我做错了吗?我需要使用那个变量...

【问题讨论】:

    标签: mysql symfony doctrine-orm


    【解决方案1】:

    我确实解决了:

    我现在确实将值作为数组传递,关键是还要声明类型:

    ->setParameter('days', $days_string)
    ->setParameter('supplierIds', $supplierIds, \Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
    

    【讨论】:

      【解决方案2】:

      尝试传递数组而不是字符串来设置参数 学说知道如何映射“in” where 子句。

      分解你的字符串

      【讨论】:

        猜你喜欢
        • 2015-08-17
        • 2014-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 2013-07-04
        • 1970-01-01
        相关资源
        最近更新 更多