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

标签 php laravel eloquent

我有这样的问题,我想在具有 70 个模型的自定义项目中编写自己的表单构建器,但我需要在 Eloquent 情况下学习关系类型,还需要学习 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');
    }
}

我需要这样的东西:

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

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

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

返回应该是这样的:

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

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

最佳答案

这个实现怎么样?

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如果您担心反射类:

关于php - 我怎样才能在 Laravel 获得关系类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41846076/

相关文章:

php - 使用 PDO 和 Between

php - Laravel 4 - 如何将所有字段的所有验证错误消息作为 JSON 结构返回?

php - 查询生成器 laravel

Laravel - 如何更改列类型(smallInteger => string)

php - 将记录附加到 Laravel hasManyThrough 关系

mysql - Laravel5 : SQLSTATE[42000]: Syntax error or access violation: 1055

php - MySQL:如果插入值不唯一则返回错误

php - uksort 帮助 - 在单个需要帮助中使用 GROUP BY

javascript - Angular + Laravel : loading view via ngRoute

Laravel-如何在 parent 改变时更新所有 child ?