hedronium\Jables\Checker::foreignKeyError PHP Метод

foreignKeyError() публичный Метод

public foreignKeyError ( )
    public function foreignKeyError()
    {
        $this->resolveRefferencechecks();
        $fields = [];
        $foreigns = [];
        foreach ($this->datas as $file => $table) {
            $table_name = $this->getName($file);
            foreach ($table->fields as $field_name => $field) {
                $fields[$table_name . '.' . $field_name] = $field;
                if (isset($field->foreign)) {
                    $foreigns[$table_name . '.' . $field_name] = $field->foreign;
                }
            }
            if (isset($table->foreign)) {
                $table_foreigns = (array) $table->foreign;
                $table_new_foreigns = [];
                foreach ($table_foreigns as $field => $parent) {
                    if (!isset($table->fields->{$field})) {
                        return "The field {$field} does not exist in table {$table_name}";
                    }
                    $table_new_foreigns[$table_name . '.' . $field] = $parent;
                }
                $foreigns = array_merge($foreigns, $table_new_foreigns);
            }
        }
        foreach ($foreigns as $child => $parent) {
            if (!isset($fields[$parent])) {
                return "{$parent} does not exist, in {$child}";
            }
            $fields[$child];
            if (isset($this->refference_checks[$fields[$child]->type])) {
                $checks = $this->refference_checks[$fields[$child]->type];
            } else {
                $checks = ['type'];
            }
            foreach ($checks as $check) {
                if (!(isset($fields[$child]->{$check}) && isset($fields[$parent]->{$check}))) {
                    return "The fields definitions {$child} & {$parent} don't match. ({$check} missing)";
                }
                if (is_array($fields[$child]->{$check}) && is_array($fields[$parent]->{$check})) {
                    if (!empty(array_diff($fields[$child]->{$check}, $fields[$parent]->{$check})) || !empty(array_diff($fields[$parent]->{$check}, $fields[$child]->{$check}))) {
                        return "The fields definitions {$child} & {$parent} don't match. ({$check})";
                    }
                } elseif ($fields[$child]->{$check} !== $fields[$parent]->{$check}) {
                    return "The fields definitions {$child} & {$parent} don't match. ({$check})";
                }
            }
        }
    }