2015-10-07 116 views
1

比方说,我有这样的口才模型类:我可以通过表名获取模型类的名称吗?

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

而且地方在我的代码我有表名

$table_name = 'the_fruit_table'; 

变量有没有办法让谁是模型的名称负责该表格? 因此,在这种情况下,我会得到的字符串:

'\App\Fruit' 

回答

0

如果你正在跟踪的laravel命名约定,你可以尝试以下

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

即使我不遵守命名约定,我也需要获取模型的名称。我相应地编辑了我的问题。谢谢! –

+0

以上应该适用于更新的表名称,以及只要您的型号名称是单数,并使用完全匹配的情况。例如。 'the_fruit_table' =>'TheFruitTable','my_tables' =>'MyTable','tables' =>'Table', – chanafdo

+0

如果您遵循任何其他命名约定,请告诉我是否可以编辑它以符合您的要求。 – chanafdo

0

如果您使用的是默认的命名系统,你可以得到类名像这样:

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

然后检查是否存在类:

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

终于可以得到使用这种方式:

$result = $class::all() 
+0

即使我不遵循命名约定,我也需要获取模型的名称。我相应地编辑了我的问题。谢谢! –

0

技术上讲,它是可能的:

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

但是:

1)FruitPeer一定是(自动)装因为在BaseFruitPeer的最后有幻线:

BaseFruitPeer::buildTableMap(); 

2)本例假设您使用的是默认数据库。如果你不是,那么你必须将它提供给getDatabaseMap()。

Propel只是充满了惊喜。

相关问题