命名约定:用于描述PHP中实体的类的单数与复数

时间:2011-06-05 17:38:10

标签: php orm naming-conventions doctrine-orm entities

我认为在MySQL中命名表的标准做法是使用复数名称。

引用这些表的类也应该是复数?

例如,假设您有一个名为Users的表,用于身份验证。

使用教义ORM:

,这个表将在或多或少的实体类中描述
namespace Company\BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="Users")
 */
class Users
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer", name="user_id")
     * @ORM\GeneratedValue(strategy="AUTO")
     * 
     * @var integer $userId
     */
    protected $userId;

    /**
     * @ORM\Column(type="string", length="255", name="first_name")
     * 
     * @var string $userName
     */
    protected $userName;
    ...
}

这是对的吗?

或者“用户”类应该以单数形式命名(“用户”)吗?

4 个答案:

答案 0 :(得分:4)

如果你的类应该代表一个真实世界的项目的实例,那么在语义上我会说单数形式可能是一个可以使用的。数据库表用于存储多个项目,因此复数形式是合适的。无论哪种方式,只要你保持一致,这并不重要。

答案 1 :(得分:3)

在数据库中,它们是复数,因为它是很多的表格;许多用户的表。作为一个对象,它是一个单一的东西;一个用户。我通常会把我的课程保持单数。

答案 2 :(得分:3)

表示一个数据库行(实体)的类应具有单数名称。 Doctrine 2默认行为是以相同的方式命名数据库表。如果您愿意,可以在每个@Table注释中重新配置它,但我建议您坚持使用Doctrine命名约定 - 数据库表的单数名称也是可以接受的。

答案 3 :(得分:0)

我还订阅了使用带有单数名称的表名,因为一行代表一个表的一个项,就像一个对象代表一个类实例一样。唯一的例外是当表的每一行包含例如序列化(或等效)项时,即某个位置的“邻居”。