Nested relations detection. (#763)

This commit is contained in:
edcoreweb
2019-02-03 16:59:09 +01:00
committed by Barry vd. Heuvel
parent d00600d769
commit bcb881b20d
+14 -12
View File
@@ -452,6 +452,8 @@ class ModelsCommand extends Command
) { ) {
//Use reflection to inspect the code, based on Illuminate/Support/SerializableClosure.php //Use reflection to inspect the code, based on Illuminate/Support/SerializableClosure.php
$reflection = new \ReflectionMethod($model, $method); $reflection = new \ReflectionMethod($model, $method);
// php 7.x type or fallback to docblock
$type = (string) $reflection->getReturnType() ?: $this->getReturnTypeFromDocBlock($reflection);
$file = new \SplFileObject($reflection->getFileName()); $file = new \SplFileObject($reflection->getFileName());
$file->seek($reflection->getStartLine() - 1); $file->seek($reflection->getStartLine() - 1);
@@ -466,19 +468,19 @@ class ModelsCommand extends Command
$code = substr($code, $begin, strrpos($code, '}') - $begin + 1); $code = substr($code, $begin, strrpos($code, '}') - $begin + 1);
foreach (array( foreach (array(
'hasMany', 'hasMany' => '\Illuminate\Database\Eloquent\Relations\HasMany',
'hasManyThrough', 'hasManyThrough' => '\Illuminate\Database\Eloquent\Relations\HasManyThrough',
'belongsToMany', 'belongsToMany' => '\Illuminate\Database\Eloquent\Relations\BelongsToMany',
'hasOne', 'hasOne' => '\Illuminate\Database\Eloquent\Relations\HasOne',
'belongsTo', 'belongsTo' => '\Illuminate\Database\Eloquent\Relations\BelongsTo',
'morphOne', 'morphOne' => '\Illuminate\Database\Eloquent\Relations\MorphOne',
'morphTo', 'morphTo' => '\Illuminate\Database\Eloquent\Relations\MorphTo',
'morphMany', 'morphMany' => '\Illuminate\Database\Eloquent\Relations\MorphMany',
'morphToMany', 'morphToMany' => '\Illuminate\Database\Eloquent\Relations\MorphToMany',
'morphedByMany' 'morphedByMany' => '\Illuminate\Database\Eloquent\Relations\MorphToMany'
) as $relation) { ) as $relation => $impl) {
$search = '$this->' . $relation . '('; $search = '$this->' . $relation . '(';
if ($pos = stripos($code, $search)) { if (stripos($code, $search) || stripos($impl, $type) !== false) {
//Resolve the relation's model to a Relation object. //Resolve the relation's model to a Relation object.
$methodReflection = new \ReflectionMethod($model, $method); $methodReflection = new \ReflectionMethod($model, $method);
if ($methodReflection->getNumberOfParameters()) { if ($methodReflection->getNumberOfParameters()) {