有人可能会在这里解释为什么在地球上CakePHP有一个使用多个名称用于数据库表和控制器以及单数用于模型的约定?为什么不总是使用单数术语,或总是复数?对我来说,总是不得不想“现在我在这里使用复数还是单数?”似乎令人困惑。 (或者有一种简单的方法可以记住吗?)然后你有连接表使用两者的组合!
我认为在某个地方有一个很好的理由,但只是没有碰到它。
(我真的希望这不仅仅是因为Ruby-on-Rails的工作原理。)
西蒙。
答案 0 :(得分:10)
CakePHP的惯例已经从多年的Web开发经验和最佳实践中提炼出来。虽然我们建议您在使用CakePHP进行开发时使用这些约定,但我们应该提到许多这些原则很容易被覆盖 - 这在使用遗留系统时尤其方便。
我认为这个想法是让它更流畅地阅读和以正确的方式思考元素。数据库表总是复数,因为它们包含许多记录。该模型是单一的,因为您应该考虑使用它来查找单个记录。 model_id
的选择字段会自动从$models
获取其选项,因为您可以选择其中之一。
$model = $this->Model->find('first'); // reads like English
$model = $this->Models->find('first'); // slightly trips you up
$models = $this->Model->find('all'); // works okay
$models = $this->Models->find('all'); // more logical, but "this models" still trips
它并不总是完美的,但我认为一旦你习惯它,这是一个很好的约定。我可以看到它在开始时会如何混淆。
答案 1 :(得分:4)
有一种简单的方法可以记住吗?
是的,关于命名约定计数的部分(db / model / controller)...如果它不是模型的名称(即。User
)或外键的名称(即。user_id
),那就是复数。除了这两件事之外,一切都基本上是复数。