2017-01-25 2 views
0

У меня проблема, что я хочу написать свой собственный конструктор форм в пользовательском проекте с 70 моделями, но мне нужно узнать тип отношений в красноречиве, а также 2 или 3 дельта больше.Как я могу получить тип отношения в Laravel

Например:

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']; 

ответ

2

Как насчет этой реализации?

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_class с get_short_class выше.

Some benchmarks в случае, если вы беспокоитесь о классе отражения:

+0

Привет там работал я нужна hasMany модель в функции? –

+0

Извините, у вас не возникли вопросы? –

Смежные вопросы