Laravel获取相关模型的类名

fly*_*123 29 php laravel eloquent

在我的Laravel应用程序中,我有一个Faq模型.一个Faq模型可以包含很多Product的车型,所以在Faq类包含以下功能:

class Faq extends Eloquent{ 
    public function products(){
        return $this->belongsToMany('Product');
    }
}
Run Code Online (Sandbox Code Playgroud)

在控制器中,我希望能够检索定义关系的类名.例如,如果我有一个Faq对象,像这样:

$faq = new Faq();
Run Code Online (Sandbox Code Playgroud)

如何确定关系的类名,在本例中为Product.目前我可以这样做:

$className = get_class($faq->products()->get()->first());
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有办法在不必实际运行查询的情况下完成同样的事情.

Jar*_*zyk 83

是的,有一种方法可以获得相关模型而无需查询:

$className = get_class($faq->products()->getRelated());
Run Code Online (Sandbox Code Playgroud)

它适用于所有关系.

这将返回名称空间的全名.如果您只想使用基本名称:

// laravel helper:
$baseClass = class_basename($className);

// generic solution
$reflection = new ReflectionClass($className);
$reflection->getShortName();
Run Code Online (Sandbox Code Playgroud)