Laravel获取相关模型的类名

时间:2014-10-10 05:49:34

标签: php laravel eloquent

在我的Laravel应用程序中,我有一个Faq模型。 Faq模型可以包含许多Product模型,因此Faq类包含以下函数:

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

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

$faq = new Faq();

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

$className = get_class($faq->products()->get()->first());

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

2 个答案:

答案 0 :(得分:68)

是的,有一种方法可以在没有查询的情况下获得相关模型:

$className = get_class($faq->products()->getRelated());

它适用于所有关系。

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

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

// generic solution
$reflection = new ReflectionClass($className);
$reflection->getShortName();

答案 1 :(得分:0)

我认为你做不到。我不知道你需要它,但你可以简单地添加额外的方法,你把你所有的关系类名称和你想要的地方放在哪里:

public function getRelationsClassName($relation) {
    $relations = [
        'products' => 'Product',
        'users' => 'User',
    ]  
    return isset($relations[$relation]) ? $relations[$relation] : null;
}