我可以通过表名获取模型类的名称吗?

时间:2015-10-07 12:23:55

标签: php laravel model eloquent

我们说我有这个雄辩的模型类:

class Fruit extends Model
{
    //whatever not following the conventions
    protected $table = 'the_fruit_table'; 
}

在我的代码中的某个地方,我有一个表名为

的变量
$table_name = 'the_fruit_table';

有没有办法获得对该表负责的模型名称? 所以在这种情况下我会得到字符串:

'\App\Fruit'

3 个答案:

答案 0 :(得分:0)

如果您遵循laravel命名约定,可以尝试以下

$class = '\YourModelsNamespace\' . studly_case(str_singular($table))

答案 1 :(得分:0)

如果您使用的是默认命名系统,则可以获得类名:

$class = 'App\\'.ucwords(rtrim(camel_case($table_name),'s'));

然后检查该类是否存在:

if(class_exists($class)){
    //do something
}

最后你可以这样使用它:

$result = $class::all()

答案 2 :(得分:0)

技术上可行:

$className = \Propel::getDatabaseMap()->getTable('the_fruit_table')->getClassName();

可是:

1)FruitPeer必须已经(自动)加载,因为在BaseFruitPeer的末尾有魔术线:

BaseFruitPeer::buildTableMap();

2)此示例假定您使用的是默认数据库。如果不是,则必须将其提供给getDatabaseMap()。

Propel充满了惊喜。