带有参数数组的SQL请求

时间:2017-06-20 17:23:24

标签: php mysql sql symfony doctrine-orm

我的SQL(dql)请求有问题, 我有一个包含书籍(媒体)的表格,一个包含类别的表格,以及一个将两者联系起来的表格:CategoryAffiliation(一本书可以有多个类别)

在客户端,我可以选择通过检查多个类别来搜索图书。然后客户端向服务器发送一系列类别,他必须返回至少包含其中一个类别的书籍。

$books = [];
if (isset($data['categories'])) {
    foreach ($data['categories'] as $key => $value){
        $query = $em->createQuery("SELECT m
                                   FROM AppBundle:Media m, AppBundle:Category c, AppBundle:CategoryAffiliation mc
                                   WHERE m.idMedia = mc.idMedia
                                   AND mc.idCategory = :key
                                   GROUP by m.idMedia"
        )->setParameter('key',$key);
        $result = $query->getResult();
        foreach ($result as $book) {
            array_push($books, $book);
        }
    }
}

这是我现在的解决方案,但这不是很好,我不能通过ORDER BY结果.. 我收到一系列重复书籍,然后在客户端我合并它们以删除重复项。

我正在寻找一种方法来一次获取所有数据

由于

1 个答案:

答案 0 :(得分:0)

我无法访问我的东西进行测试,但这可以做到。我只是不确定setParameter将如何处理我在字符串中放置'的事实。我认为您需要获取原始信息。我无法记住symfony和doctrine如何管理它,它已经太久了;)

如果你找不到其他方法,你可以直接在字符串中构建它...我不是真的推荐。

$query = $em->createQuery("SELECT m
                           FROM AppBundle:Media m, AppBundle:Category c, AppBundle:CategoryAffiliation mc
                           WHERE m.idMedia = mc.idMedia
                                 AND mc.idCategory IN (:key)
                           GROUP by m.idMedia"
        )->setParameter('key',implode("','",array_keys($data['categories'])));