从 camelCase 转换为 snake_case 的关系名称

Posted

技术标签:

【中文标题】从 camelCase 转换为 snake_case 的关系名称【英文标题】:Relation name converting from camelCase to snake_case 【发布时间】:2019-11-22 14:12:15 【问题描述】:

我有一个关于 Illuminate Database 4.2 的旧项目,现在我尝试将其升级到 6.0,但我发现了一些奇怪的东西: 我有这样的关系:

public function addressTV()

        return $this->hasMany('Billing\db\Models\AddrMapTv', 'StreetID');

在 4.2 中使用时

$list = \Billing\db\Models\Street::with(['addressTV'])->get()->toArray();

它转换为:

$list['address_tv']

没关系。

但在 6.0 中,我得到了相同的代码:

$list['address_t_v'];

这给我带来了很多问题。有没有办法返回旧名称转换?

【问题讨论】:

【参考方案1】:

如果您以这种方式定义了许多关系,可能会有点困难,但是,我在这里看到的最简单的方法是定义 accessor

您的问题是缺少address_tv 键,定义accessor 将添加该键。

所以在你的Street 模型中:

/**
 * Get the street's address_tv.
 *
 * @return object
 */
public function getAddressTvAttribute()

    return $this->addressTV();

没有测试,但理论上应该可以。

【讨论】:

以上是关于从 camelCase 转换为 snake_case 的关系名称的主要内容,如果未能解决你的问题,请参考以下文章

将 Java 字符串从全部大写(由下划线分隔的单词)转换为 CamelCase(无单词分隔符)的最简单方法是啥?

将返回的 JSON 对象属性转换为(较低的第一个)camelCase

将连字符转换为驼峰式 (camelCase)

正则表达式在 Redshift 中将 CamelCase 转换为蛇形案例

Python函数将camelCase转换为Sentence Case

使用 JavaScript 将 kebab-case 转换为 camelCase