Merge pull request #148 from BaldaI/fix-relations

Fixed class name resolution via get_class() and static::class.
This commit is contained in:
Barry vd. Heuvel
2015-01-21 11:05:40 +01:00
+14 -4
View File
@@ -333,9 +333,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(
@@ -514,9 +514,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);