Prevent undefined property errors (#877)

If the property name matches the foreign key name
creating a BelongsTo relation triggers an undefined
property error. Disabling constraints prevents
accessing the property and thus prevents the error.
This commit is contained in:
Matt A
2020-01-12 17:51:04 +01:00
committed by Barry vd. Heuvel
parent 805c4e9a2a
commit 972befd7aa
3 changed files with 21 additions and 3 deletions
+10 -3
View File
@@ -230,7 +230,9 @@ class ModelsCommand extends Command
$ignore[] = $name;
$this->nullableColumns = [];
} catch (\Throwable $e) {
$this->error("Exception: " . $e->getMessage() . "\nCould not analyze class $name.\n\nTrace:\n".$e->getTraceAsString());
$this->error("Exception: " . $e->getMessage() .
"\nCould not analyze class $name.\n\nTrace:\n" .
$e->getTraceAsString());
}
}
}
@@ -476,7 +478,7 @@ class ModelsCommand extends Command
// php 7.x type or fallback to docblock
$type = (string)$this->getReturnTypeFromDocBlock($reflection);
}
$file = new \SplFileObject($reflection->getFileName());
$file->seek($reflection->getStartLine() - 1);
@@ -510,7 +512,12 @@ class ModelsCommand extends Command
continue;
}
$relationObj = $model->$method();
// Adding constraints requires reading model properties which
// can cause errors. Since we don't need constraints we can
// disable them when we fetch the relation to avoid errors.
$relationObj = Relation::noConstraints(function () use ($model, $method) {
return $model->$method();
});
if ($relationObj instanceof Relation) {
$relatedModel = '\\' . get_class($relationObj->getRelated());