【问题标题】:Retrieve records from database where a field equals multiple values in Symfony2从数据库中检索字段等于 Symfony2 中的多个值的记录
【发布时间】:2014-04-17 13:10:54
【问题描述】:

我正在尝试对 Symfony2 项目中的表进行计数,其中记录需要匹配一个字段中的多个值。 SQL 是这样的:

SELECT * FROM posts WHERE userid IN ('3,4,1') AND open = '1';

目前,我有这个代码:

        $group = '3,4,1';

        $activePosts = $dm->createQuery('
        SELECT COUNT(p.id)
        FROM AcmeBundle:Posts p
        WHERE p.userId IN (:user)
        AND mb.open = :active'
        )->setParameters(array(
            'user' => $group,
            'active' => '1'
        ));

        $actPost = $activePosts->getSingleScalarResult();

它确实检索记录,但它忽略了$group 变量中的最后两个值。所以在这种情况下,它本质上是使用数字“3”运行查询,而不是使用“4”或“1”。

如何在 Symfony2 中复制我可以使用 SQL 查询执行的操作?

【问题讨论】:

    标签: php symfony doctrine dql


    【解决方案1】:

    您需要将$group 设为数组才能使用IN() 子句

    $group = array('3','4','1');
    
    $activePosts = $dm->createQuery('
            SELECT COUNT(p.id)
            FROM AcmeBundle:Posts p
            WHERE p.userId IN (:user)
            AND mb.open = :active'
            )->setParameters(array(
                'user' => $group,
                'active' => '1'
            ));
    

    这将导致 WHERE p.userId IN ('3','4','1') 并且您当前的查询使用它就像 WHERE p.userId IN ('3,4,1') 这是错误的,它正在搜索字符串 3,4,1 而不是单个 ID

    【讨论】:

    • 太棒了!非常感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 2013-06-16
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多