我们遵循Laravel将模型属性命名为snake_case_variables的标准。虽然Laravel只是我们系统中的API层,它与Javascript前端和许多其他应用程序进行对话。
我们API的所有消费者都非常喜欢使用驼峰式变量(例如javascript / React)。
我们发现很难改变核心模型属性,例如created_at,updated_at,confirmation_password,模型关系等变成了蛇案。
我们已经玩弄并实施了转换层来改变进出的“套管”,虽然这只会增加维护和开发人员记住的另一件事......
我们如何轻松地将所有模型属性,关系和一般Laravel绑定转换为驼峰案例?
答案 0 :(得分:3)
我没有建议,因为它改变了laravel的核心,所以它修改供应商文件,并且不会轻易更新而不会失去更改,但我认为最简单的方法是这样做是为了更换带有修改版本的 vendor \ laravel \ framework \ src \ illuminate \ Support \ Str.php 。 laravel对此文件中的方法执行对studly,camel case,snake case等的所有字符串修改。通过函数改变函数的执行方式,但我不认为它会有意义,因为方法名称与它们正在执行的内容不匹配。
最好,但最困难的方法是进入正在使用Str类中的方法并根据您的需要进行修改的每个文件,而不是它有意义,而且需要更改方法时需要做很多工作。被使用。
从这些文件中更改所需的值。
参见 vendor \ laravel \ framework \ src \ Database \ Eloquent \ Model.php ,您也可以看到这些值在此处设置,以便从模型中进行检查。
public static $manyMethods = ['belongsToMany', 'morphToMany', 'morphedByMany'];
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
请参阅 vendor \ laravel \ framework \ src \ Database \ Schema \ Blueprint.php ,您还可以在此处设置这些值,以便从创建迁移和删除迁移进行检查。例如,创建时间戳的那个。
public function timestamps()
{
$this->timestamp('created_at')->nullable();
$this->timestamp('updated_at')->nullable();
}
答案 1 :(得分:2)
你一定要看看Mappable。我们遇到了同样的问题,这解决了它。您可以将snake_case映射到CamelCase名称,甚至可以在QueryBuilder中使用它们。