2015-10-07 118 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只是充滿了驚喜。

相關問題