2015-05-29 55 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