实体名称与 Cakephp 3 中的 table 名称不同

Entity name is different then the table name in Cakephp 3

我在 Cakephp 3 中创建我的模型时遇到了一个小问题,我必须 table(pistolets 和 cuves)与一个“hasOne 关联,问题是当我创建我的 Cuves 模型时使用 . /cake bake 我得到一个名为 Cufe 的实体,我不知道这个名字是从哪里来的,而且当我调用 $pistolets = $this->Pistolets->find('all')->contain('Cuves'); 时,我也得到一个看起来像这样的对象:

        [id] => 1
        [libelle] => P1
        [volumetrique_id] => 1
        [cuve_id] => 1
        [pompiste_id] => EE324925
        [date_affectation] => Cake\I18n\FrozenTime Object
            (
                [date] => 2016-03-10 00:00:00
                [timezone_type] => 3
                [timezone] => UTC
            )
        [cufe] => Cake\ORM\Entity Object
            (
                [_properties:protected] => Array
                    (
                        [id] => 1
                        [libelle] => C1
                        [capacite] => 2000
                        [carburant_id] => 1
                    )

我检查了我写的每一段代码,我能够在其中找到单词 Cufes,谁能解释一下 cakephp 3 是如何生成代码的?可能是错误还是只是我的错误?

Bake 遵循 CakePHP 的命名约定,它们基于英语,实体名称按照约定是 table 名称的单数变体。

在应用词形变化时使用非英语单词可能会给您带来意想不到的结果。

http://sandbox3.dereuromark.de/sandbox/inflector?string=cuves

理想情况下,您不应该使用您的本地语言进行编程,而应该使用英语,这不仅有助于未来的开发人员以及无论出于何种原因而查看您的代码的任何人,它也可以解决这个问题。

也就是说,一种解决方法是添加自定义变形(您可以在 bootstrap 中设置它们)

\Cake\Utility\Inflector::rules('irregular', ['cuve' => 'cuves']);

另见