public static function findByMetadataQueryBuilder(
        QueryBuilder $qb,
        $join,
        array $metadata,
        $alias = 'metadata',
        $operator = 'eq',
        $whereOperator = 'and'
    ) {
        $qb->join($join, $alias);

        foreach ($metadata as $key => $data) {
            $andX = $qb->expr()->andX();

            foreach ($data as $field => $value) {
                $itemOperator = $operator;

                if (is_array($value)) {
                    $value = $value['value'];
                    $itemOperator = $value['operator'];
                }

                $parameterName = sprintf('%s_%s_%s', $alias, $field, $key);
                $andX->add(call_user_func_array(
                    array($qb->expr(), $itemOperator),
                    array(
                        sprintf('%s.%s', $alias, $field),
                        sprintf(':%s', $parameterName),
                    )
                ));

                $qb->setParameter($parameterName, $value);
            }

            call_user_func_array(array($qb, sprintf('%sWhere', $whereOperator)), array($andX));
        }

        return $qb;
    }
public static function findByMetadataQueryBuilder(
        QueryBuilder $qb,
        $join,
        array $metadata,
        $alias = 'metadata',
        $operator = 'eq',
        $whereOperator = 'and'
    ) {
        $qb->join($join, $alias);

        foreach ($metadata as $key => $data) {
            $andX = $qb->expr()->andX();

            foreach ($data as $field => $value) {
                $itemOperator = $operator;

                if (is_array($value)) {
                    $value = $value['value'];
                    $itemOperator = $value['operator'];
                }

                $parameterName = sprintf('%s_%s_%s', $alias, $field, $key);
                $andX->add(call_user_func_array(
                    array($qb->expr(), $itemOperator),
                    array(
                        sprintf('%s.%s', $alias, $field),
                        sprintf(':%s', $parameterName),
                    )
                ));

                $qb->setParameter($parameterName, $value);
            }

            call_user_func_array(array($qb, sprintf('%sWhere', $whereOperator)), array($andX));
        }

        return $qb;
    }
public static function findByMetadataQueryBuilder ( QueryBuilder $ qb , $ join , array $ metadata , $ alias = 'metadata' , $ operator = 'eq' , $ whereOperator = 'and' ) { $ qb -> join ( $ join , $ alias ) ; foreach ( $ metadata as $ key => $ data ) { $ andX = $ qb -> expr ( ) -> andX ( ) ; foreach ( $ data as $ field => $ value ) { $ itemOperator = $ operator ; if ( is_array ( $ value ) ) { $ value = $ value [ 'value' ] ; $ itemOperator = $ value [ 'operator' ] ; } $ parameterName = sprintf ( '%s_%s_%s' , $ alias , $ field , $ key ) ; $ andX -> add ( call_user_func_array ( array ( $ qb -> expr ( ) , $ itemOperator ) , array ( sprintf ( '%s.%s' , $ alias , $ field ) , sprintf ( ':%s' , $ parameterName ) , ) ) ) ; $ qb -> setParameter ( $ parameterName , $ value ) ; } call_user_func_array ( array ( $ qb , sprintf ( '%sWhere' , $ whereOperator ) ) , array ( $ andX ) ) ; } return $ qb ; }
Find by metadata query builder.

@param QueryBuilder $qb
@param string       $join
@param array        $metadata
@param string       $alias
@param string       $operator

@return QueryBuilder
Find by metadata query builder .