【问题标题】:doctrine query with parameters having multiple values具有多个值的参数的学说查询
【发布时间】:2018-10-19 13:02:22
【问题描述】:

我想做一个原则查询,其中每个参数可以有多个值(来自一个选择多个)。

我有一个表,其“类型”参数的值可以是 1、2、3 或 4,而“在线”参数的值可以是 0 或 1。

到目前为止,我的查询如下:

$query = $this->createQueryBuilder('properties');

if (array_key_exists('type', $searchValues)) {

    $types = $searchValues['type'];
    $iterator = 0;

    foreach ($types as $type) {

        if ($iterator == 0) {

            $query->andWhere('properties.idPropertyType = ' . $type);

        } else {

            $query->orWhere('properties.onlineProperties = ' . $type);

        }

            $iterator++;

        }
    }

if (array_key_exists('status', $searchValues)) {

    $status = $searchValues['status'];
    $iterator = 0;

    foreach ($status as $statu) {

        if ($iterator == 0) {

            $query->andwhere('properties.onlineProperties = ' . $statu);

        } else {

            $query->andWhere('properties.onlineProperties = ' . $statu);

        }

        $iterator++;

    }

}

$properties = $query->getQuery()->getResult();

在参数类型 = 1 且在线 = 0 和 1 的搜索的情况下,我得到的结果类型是 1 以外的另一个值。我理解原因,但我无法找出进行查询的正确方法。

【问题讨论】:

    标签: doctrine-query


    【解决方案1】:

    您无需手动构建查询,只需使用 QueryBuilder 类中的 (in) 函数即可。试试这个:

    $query = $this->createQueryBuilder('properties');
    
    if(array_key_exists('type', $searchValues)){
        $types = $searchValues['type'];
        $query->andWhere($query->expr()->in('properties.idPropertyType', $types));
    }
    
    if(array_key_exists('status', $searchValues)){
        $status = $searchValues['status'];
        $query->andwhere($query->expr()->in('properties.onlineProperties', $status));
    }
    
    $properties = $query->getQuery()->getResult();
    

    【讨论】:

    • 感谢您的帮助。我试图找出我得到的错误:[Syntax Error] line 0, col 145: Error: Expected Literal, got ')'
    • 基于什么代码?你能把代码贴出来吗,是不是把这个错误扔给你了?
    • 太好了,这正是我需要的!我修复了在结束前检查参数数组是否为空的问题。然而,我现在面临一个新问题。我有另一个属性,它的值可以是 1、2、3、4、5 和 >5。但我会提出一个新问题;)谢谢!
    • 对于属性实体的属性来说,一切都像魅力一样,但是我无法获得相关实体“约束”和“定价信息”的属性。我不可能做类似的事情: $query->andwhere($query->expr()->in('properties.constraints.capacity', $capacity));有什么想法可以完成这项工作吗?
    • 您必须添加一个带有“约束”实体的 INNER JOIN 才能访问该实体的属性,然后您可以按照我在上面的代码中向您展示的相同操作。
    猜你喜欢
    • 2011-02-09
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多