即使实体中包含名称获取器,也会烘焙错误的表 displayField

Posted

技术标签:

【中文标题】即使实体中包含名称获取器,也会烘焙错误的表 displayField【英文标题】:Wrong table displayField being baked even though a name getter contained in entity 【发布时间】:2021-12-06 12:48:36 【问题描述】:

这是在我的表中设置的当前displayField

$this->setDisplayField('id');

我需要它:

$this->setDisplayField('name');

但是,我的数据库表有双语字段,例如 name_enname_fr,我使用 getter 在实体中填充 name

protected $_virtual = ['name'];

protected function _getName()

    if (Configure::read('wetkit.lang') == 'fr')
        return $this->_properties['name_fr'];
     else 
        return $this->_properties['name_en'];
    

实体中带有虚拟字段的烘焙表是否应该在烘焙期间将 displayField 设置为 name?

也许在 table bake 过程中 getter 不可用以确定 displayField 并默认为id

我是否必须修改 table.twig 文件以相应地输出,这取决于我的结构具有 name_enname_fr

【问题讨论】:

您是否有很多需要烘焙的文件,或者您可以只更改烘焙过程产生的文件吗? 我们有一个用于烘焙的插件,我们烘焙这样的双语网站,因此不幸的是需要假设这种情况经常出现。我可以轻松地调整插件的 table.twig 文件。我只是想知道它是否应该通过虚拟领域抓住它。 【参考方案1】:

最终修改了table.twig 文件:

%- set setBilingualDisplayField = false %
%- for bf in bilingualFields %
    %- if bf.name == 'name' %
        %- set setBilingualDisplayField = true %
    %- endif %    
%- endfor %
% if setBilingualDisplayField %
        $this->setDisplayField('name');
% else %
        $this->setDisplayField(' displayField ');
% endif %

【讨论】:

以上是关于即使实体中包含名称获取器,也会烘焙错误的表 displayField的主要内容,如果未能解决你的问题,请参考以下文章

错误“缓存可能已过期,请尝试 `force_reload=True`。”即使我在代码块中包含了 `force_reload=True` 也会出现?

TSQL - 如何查找名称中包含日期的所有表

Access ODBC 无法读取名称中包含多个双引号的表

EF6:如何在 Select 中包含子属性,以便创建单个实例。避免“相同的主键”错误

你如何强制在 R 的表中包含一个级别?

扩展MVC5和实体框架6 ApplicationUser导致用户注册无效列错误