我怎样才能在Laravel获得关系类型

时间:2017-01-25 07:48:48

标签: php laravel eloquent

我有一个问题,我想在70个模型的自定义项目中编写我自己的表单构建器,但我需要在eloquent中学习关系类型,还需要2或3个depht。

例如:

class Category extends BaseModel
{
    public function details()
    {
        return $this->hasMany(CategoryDetail::class);
    }
}


class CategoryDetail extends BaseModel
{
    public function extras()
    {
        return $this->morphMany(Extra::class,'model');
    }
}

我需要这样的东西:

learnMethodType(Category::class,'details');

真正需要:数据来自建立的json

 learnMethodType(Category::class,'details.extras'); 

返回应该像:

['model'=> CategoryDetail::class,'type'=>'hasMany', ... other parameters];

['model'=> Extra::class,'type'=>'morphMany', 'name'=> 'model'];

1 个答案:

答案 0 :(得分:3)

这个实现怎么样?

function learnMethodType($classname,$method){
    $oReflectionClass = new ReflectionClass($classname);
    $method = $oReflectionClass->getMethod($method)
    $type = get_class($method->invoke($classname))
    return $type;
}

或者只是这个:

function learnMethodType($classname,$method){
    $obj = new $classname;
    $type = get_class($obj->{$method}())
    return $type;
}

对于您的情况,您还可以添加

function get_short_class($obj){
    return (new \ReflectionClass($obj))->getShortName();
}

用上面的get_short_class替换get_class。

Some benchmarks如果您担心反思类: