From d00dc62ed6bfc54ba0aab7d0f50294d7094c8490 Mon Sep 17 00:00:00 2001 From: BaldaI Date: Thu, 1 Jan 2015 13:58:32 +1000 Subject: [PATCH] Fixed class name resolution via get_class() and static::class. --- src/Console/ModelsCommand.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Console/ModelsCommand.php b/src/Console/ModelsCommand.php index b0f9ee9..51e65bb 100644 --- a/src/Console/ModelsCommand.php +++ b/src/Console/ModelsCommand.php @@ -331,9 +331,9 @@ class ModelsCommand extends Command $search = '$this->' . $relation . '('; if ($pos = stripos($code, $search)) { $code = substr($code, $pos + strlen($search)); - $arguments = explode(',', substr($code, 0, stripos($code, ')'))); + $arguments = explode(',', substr($code, 0, strpos($code, ');'))); //Remove quotes, ensure 1 \ in front of the model - $returnModel = $this->getClassName($arguments[0]); + $returnModel = $this->getClassName($arguments[0], $model); if ($relation === "belongsToMany" or $relation === 'hasMany' or $relation === 'morphMany' or $relation === 'morphToMany') { //Collection or array of models (because Collection is Arrayable) $this->setProperty( @@ -507,9 +507,19 @@ class ModelsCommand extends Command return $paramsWithDefault; } - private function getClassName($className) + /** + * @param string $className + * @param \Illuminate\Database\Eloquent\Model $model + * @return string + */ + private function getClassName($className, $model) { - // If the class name was resovled via ::class (PHP 5.5+) + // If the class name was resolved via get_class($this) or static::class + if(strpos($className, 'get_class($this)') !== false || strpos($className, 'static::class') !== false) { + return get_class($model); + } + + // If the class name was resolved via ::class (PHP 5.5+) if(strpos($className, '::class') !== false) { $end = -1 * strlen('::class'); return substr($className, 0, $end);