Jarves\ConditionOperator::primaryKeyToCondition PHP 메소드

primaryKeyToCondition() 공개 메소드

public primaryKeyToCondition ( array $condition, string $objectKey = null ) : array
$condition array
$objectKey string
리턴 array
    public function primaryKeyToCondition($condition, $objectKey = null)
    {
        $result = array();
        // condition:
        // [
        //   ["bla", "=", 1], "and"
        //
        // ]
        //
        // pk:
        //  1
        //
        // pk:
        // ["bla" => 2, "hosa" => 1]
        //
        // pk:
        // [ ["bla" => 1], ["bla" => 2] ]
        if ($condition instanceof Condition) {
            return $condition->getRules();
        }
        if (is_array($condition) && array_key_exists(0, $condition) && is_array($condition[0]) && is_numeric(key($condition)) && is_numeric(key($condition[0]))) {
            //its already a condition object
            return $condition;
        }
        $primaries = null;
        if ($objectKey && $this->objects->getDefinition($objectKey)) {
            $primaries = $this->objects->getPrimaryList($objectKey);
        }
        if (array_key_exists(0, $condition)) {
            foreach ($condition as $idx => $group) {
                $cGroup = array();
                if (is_array($group)) {
                    foreach ($group as $primKey => $primValue) {
                        if (!is_string($primKey)) {
                            $primKey = $primaries[$primKey];
                        }
                        if ($cGroup) {
                            $cGroup[] = 'and';
                        }
                        $cGroup[] = array($primKey, '=', $primValue);
                    }
                } else {
                    $primKey = $idx;
                    if (!is_string($idx) && $primaries) {
                        $primKey = $primaries[0];
                    }
                    if ($cGroup) {
                        $cGroup[] = 'and';
                    }
                    $cGroup[] = array($primKey, '=', $group);
                }
                if ($result) {
                    $result[] = 'or';
                }
                $result[] = $cGroup;
            }
        } else {
            //we only have to select one row
            $group = array();
            foreach ($condition as $primKey => $primValue) {
                if ($group) {
                    $group[] = 'and';
                }
                $group[] = array($primKey, '=', $primValue);
            }
            $result[] = $group;
        }
        return $result;
    }