Gör*_* D. 2 php laravel eloquent
我有一个这样的问题,我想在具有 70 个模型的自定义项目中编写自己的表单生成器,但我需要学习雄辩的关系类型以及 2 或 3 个深度。
例如:
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');
}
}
Run Code Online (Sandbox Code Playgroud)
我需要这样的东西:
learnMethodType(Category::class,'details');
Run Code Online (Sandbox Code Playgroud)
真正的需求:数据来自构建的json
learnMethodType(Category::class,'details.extras');
Run Code Online (Sandbox Code Playgroud)
返回应该是这样的:
['model'=> CategoryDetail::class,'type'=>'hasMany', ... other parameters];
['model'=> Extra::class,'type'=>'morphMany', 'name'=> 'model'];
Run Code Online (Sandbox Code Playgroud)
小智 6
这个实现怎么样?
function learnMethodType($classname,$method){
$oReflectionClass = new ReflectionClass($classname);
$method = $oReflectionClass->getMethod($method)
$type = get_class($method->invoke($classname))
return $type;
}
Run Code Online (Sandbox Code Playgroud)
或者简单地这样:
function learnMethodType($classname,$method){
$obj = new $classname;
$type = get_class($obj->{$method}())
return $type;
}
Run Code Online (Sandbox Code Playgroud)
对于您的情况,您还可以添加
function get_short_class($obj){
return (new \ReflectionClass($obj))->getShortName();
}
Run Code Online (Sandbox Code Playgroud)
并将上面的 get_class 替换为 get_short_class 。
如果您担心反射类,可以使用一些基准:
| 归档时间: |
|
| 查看次数: |
3349 次 |
| 最近记录: |