phprs\ezsql\impls\WhereImpl::conditionArgs PHP Method

conditionArgs() public static method

find like Mongodb query glossary whereArray( [ 'id'=>['>'=>1], 'name'=>'cym', ] ) 支持的操作符有 = 'id'=>['=' => 1] > 'id'=>['>' => 1] < 'id'=>['<' => 1] <> 'id'=>['<>' => 1] >= 'id'=>['>=' => 1] <= 'id'=>['<=' => 1] BETWEEN 'id'=>['BETWEEN' => [1 ,2]] LIKE 'id'=>['LIKE' => '1%'] IN 'id'=>['IN' => [1,2,3]] NOT IN 'id'=>['NOT IN' => [1,2,3]]
public static conditionArgs ( $context, $prefix, array $args = [] )
$args array
    public static function conditionArgs($context, $prefix, $args = [])
    {
        if ($args === null) {
            return;
        }
        $exprs = array();
        $params = array();
        foreach ($args as $k => $v) {
            if (is_array($v)) {
                $ops = ['=', '>', '<', '<>', '>=', '<=', 'IN', 'NOT IN', 'BETWEEN', 'LIKE'];
                $op = array_keys($v)[0];
                $op = strtoupper($op);
                Verify::isTrue(false !== array_search($op, $ops), new \InvalidArgumentException("invalid param {$op} for whereArgs"));
                $var = array_values($v)[0];
                if ($op == 'IN' || $op == 'NOT IN') {
                    $stubs = [];
                    foreach ($var as $i) {
                        if (is_a($i, 'phprs\\ezsql\\Native')) {
                            $stubs[] = strval($i);
                        } else {
                            $stubs[] = '?';
                            $params[] = $i;
                        }
                    }
                    $stubs = implode(',', $stubs);
                    $exprs[] = "{$k} {$op} ({$stubs})";
                } else {
                    if ($op == 'BETWEEN') {
                        $cond = "{$k} BETWEEN";
                        if (is_a($var[0], 'phprs\\ezsql\\Native')) {
                            $cond = "{$cond} " . strval($var[0]);
                        } else {
                            $cond = "{$cond} ?";
                            $params[] = $var[0];
                        }
                        if (is_a($var[1], 'phprs\\ezsql\\Native')) {
                            $cond = "{$cond} AND " . strval($var[1]);
                        } else {
                            $cond = "{$cond} AND ?";
                            $params[] = $var[1];
                        }
                        $exprs[] = $cond;
                    } else {
                        if (is_a($var, 'phprs\\ezsql\\Native')) {
                            $exprs[] = "{$k} {$op} " . strval($var);
                        } else {
                            $exprs[] = "{$k} {$op} ?";
                            $params[] = $var;
                        }
                    }
                }
            } else {
                if (is_a($v, 'phprs\\ezsql\\Native')) {
                    $exprs[] = "{$k} = " . strval($v);
                } else {
                    $exprs[] = "{$k} = ?";
                    $params[] = $v;
                }
            }
        }
        return self::condition($context, $prefix, implode(' AND ', $exprs), $params);
    }