2015-05-29 49 views
3

我需要獲取我的應用程序(包括插件)的所有模型的列表。Cake 3.x:列出所有模型

在Cake 2中,您可以使用App::objects('Model');。我怎麼能在cake 3.x中做到這一點?

謝謝!

鮑勃

+0

你可以列出像在我們這裏模式中的表:你可以得到表的列表在這裏:http://book.cakephp.org/3.0/ en/orm/schema-system.html#schema-collections,但是對於列表模型我還不確定。您可能需要使用php代碼,如'get_declared_classes(),請參閱這裏的問題和答案:http://stackoverflow.com/questions/5225971/is-it-possible-to-get-list-of-defined-namespaces – antoniovassell

+0

可能的重複[列出CakePHP 3.x中的所有表格](http://stackoverflow.com/questions/30255196/list-all-tables-in-cakephp-3-x) –

+0

@BayezidAlam它不是重複的,因爲它不是關於表;) – Bob

回答

1

我不知道這會有所幫助,但它應該給你所有你將能夠獲得的信息。至於評論者的觀點,CakePHP 3中並沒有真正的「模型」 - 有表和實體。

use Cake\Datasource\ConnectionManager; 
use Cake\ORM\TableRegistry; 

// ... 

$tables = ConnectionManager::get('default')->schemaCollection()->listTables(); 
foreach($tables as $key => $table) { 
    $tableData = TableRegistry::get($table); 
    debug($tableData); 
} 

返回此爲每個表:

object(App\Model\Table\PhotosTable) { 

'registryAlias' => 'photos', 
'table' => 'photos', 
'alias' => 'photos', 
'entityClass' => '\Cake\ORM\Entity', 
'associations' => [ 
    (int) 0 => 'tags', 
    (int) 1 => 'categorized' 
], 
'behaviors' => [ 
    (int) 0 => 'Timestamp', 
    (int) 1 => 'Sluggable' 
], 
'defaultConnection' => 'default', 
'connectionName' => 'default' 

} 
+0

Hey Dave,謝謝你的建議。但是,這種方法無法正常工作,因爲插件會使用一些表格。使用'TableRegistry :: get($ table)'獲取模型不會看到它是否被插件使用;)。 – Bob

+0

這隻有在表的名稱與相關類名相同時纔有效,例如'PostsTable'和'posts'表。 – mixable