[英]How to avoid mixed naming conventions on Laravel Eloquent Model properties and methods
我对 Laravel/Eloquent 模型中的命名约定有疑问。 当为“产品类别”或“车主”等表属性使用组合名称时,命名约定是使用蛇形大小写,因此应为“product_categories”或“car_owner”。
另一方面,PHP 和 Laravel 对方法名称使用驼峰式大小写,在使用具有关系的模型时会导致两种约定的混淆。 因为在那里我必须使用方法来链接相关模型(belongsTo 等)
这是一个例子:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
// Example for a direct property in that product model:
// "capacity_qty" (Double)
// Get the capacity unit object from related model
public function capacityUnit(): BelongsTo {
return $this->belongsTo(CapacityUnit::class);
}
}
如您所见,产品 model 有两个属性,现在必须按照不同的命名约定访问它们:
我遵循了官方 Laravel 文档,但没有组合方法/属性名称的示例。
您是否有提示我如何在这种情况下始终对方法和属性使用驼峰式大小写,而不为每个属性创建辅助方法并且不破坏数据库端的命名约定?
谢谢和最良好的祝愿,迈克尔
SQL 不区分大小写,所以
select capacityQty from CapacityUnit
//is equivalent to
select capacityqty from capacityunit
因此,对表名和列名使用小写字母是一种惯例。
在 Laravel model 中,属性表示将存储模型实体的所有记录的表的列名
因此遵循 SQL 的约定,Laravel 也使用小写的表名和模型的属性名
但是对于 class 名称,它遵循使用 PascalCase 的约定 - 在各种 Object 面向编程语言中被广泛接受和遵循
我完全理解这两种约定,而且都有意义。 然而,它导致访问具有关系的模型中的属性的方式不一致。
不幸/幸运的是 - 这是由于事实 - SQL/数据库和 Object 面向编程语言基本上是不同的世界并遵循不同的约定。
您可以在命名表和列名时遵循一致的约定。 例如:
表名:PascalCase 或小写复数,按照约定
栏目名称:camelCase
保持一致是要记住的关键。
但是,在使用 Laravel 时,遵循上述约定将需要一些额外的工作
protected $table = 'CapacityUnit'
然后,您可以将 camelCase 用于 model 属性名称。
但很明显 - 尝试使用 camelCase 访问属性的一致方式需要在使用 Eloquent 时付出巨大的额外努力,而且似乎不值得。 此外,总是存在人为错误因素的可能性,尤其是在团队环境中。
在大多数情况下,使用 MySQL、Postgres、SQL 服务器等关系数据库,除了在某些边缘情况下可能会产生一些副作用外,不会有任何重大问题。
但是,有一些现代数据库遵循全大写或小写的约定,这可能会产生重大的副作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.