首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP 3:在获取所有表对象的列表时排除供应商表

CakePHP 3:在获取所有表对象的列表时排除供应商表
EN

Stack Overflow用户
提问于 2018-06-12 17:13:21
回答 1查看 33关注 0票数 0

在我的数据库中,我有一些插件创建的表。我只需要在下拉列表中显示我的模型。

在bootstrap.php中:

代码语言:javascript
复制
Configure::write('ReportManager.modelIgnoreList',array(
'acl_phinxlog',
'acos',
'aros',
'aros_acos',
'audits',
'burzum_file_storage_phinxlog',
'burzum_user_tools_phinxlog',
'cake_d_c_users_phinxlog',
'file_storage',
'phinxlog',
));

在我的控制器索引函数中:

代码语言:javascript
复制
if (empty($this->data)) {
        $modelIgnoreList = Configure::read('ReportManager.modelIgnoreList'); 
        $models = ConnectionManager::get('default')->schemaCollection()->listTables();
        foreach($models as $key => $model) {
            if ( isset($modelIgnoreList) && is_array($modelIgnoreList)) {
                foreach ($modelIgnoreList as $ignore) {
                    if (isset($models[$ignore])) {
                        unset($models[$ignore]);
                        $modelData = TableRegistry::get($model);
                        debug($modelData);
                    }
                }
            }
        }
    debug($modelIgnoreList);
}

在index.ctp中:

代码语言:javascript
复制
echo $this->Form->create('ReportManager');
    echo '<fieldset>';
    echo '<legend>' . __d('report_manager','New report',true) . '</legend>';        
    echo $this->Form->input('model',array(
        'type'=>'select',            
        'label'=>__d('report_manager','Model',true),
        'options'=>$models,
        'empty'=>__d('report_manager','--Select--',true)
        ));

我的结果一直在显示所有的桌子。我的错误在哪里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-12 17:31:40

您使用的是模型名而不是密钥来调用unset。另外,这里不需要两个foreach循环。

代码语言:javascript
复制
$models = ConnectionManager::get('default')->schemaCollection()->listTables();
if (isset($modelIgnoreList) && is_array($modelIgnoreList)) {
    foreach($models as $key => $model) {
        if (in_array($model, $modelIgnoreList)) {
            unset($models[$key]);
        }
    }
}

或者,更简单的说,使用内置的功能来为您处理这个问题:

代码语言:javascript
复制
$models = ConnectionManager::get('default')->schemaCollection()->listTables();
if (isset($modelIgnoreList) && is_array($modelIgnoreList)) {
    $models = array_diff($models, $modelIgnoreList);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50822435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档