【问题标题】:How can I specify the database table name for a model in PHPixie?如何在 PHPixie 中为模型指定数据库表名?
【发布时间】:2017-09-03 11:22:10
【问题描述】:

我有一个错误

SQLSTATE[42S02]:未找到基表或视图:1146 表 'phpixie.persons' 不存在

当排队表“人”时:

public function getPerson($person_id)
{
    return $this->components()->orm()->query('person')
        ->where('id', $person_id)
        ->findOne();
}

来自documentation

默认情况下,ORM 假定表名是名称的复数形式 模型的名称,并且主键的名称是“id”。

如何直接指定表名?

PS 或者指定规则列表如EnglishPluralizationService:

{"child", "children"} {"corpus","corpora"} {"person", "people"}

【问题讨论】:

    标签: php phpixie


    【解决方案1】:

    根据您使用的 PHPixie 版本,有不同的解决方案可以为模型指定表名:

    2.x

    假设您已经有一个Person 模型,您可以使用$table 字段指定表名:

    class Person extends \PHPixie\ORM\Model
    {
         public $table = 'person';
    }
    

    参考见:

    3.x

    您可以覆盖配置文件中的默认假设:

    return array(
        'models' => array(
            'person' => array(
                'table'=> 'persons',
            ),
        );
    );
    

    参考见:

    【讨论】:

    • 它适用于 phpixie 3 吗?我已经创建了 \bundles\app\src\ORM\Model\Person.php 但它不起作用
    • 调整了答案以包含3.x的说明!
    【解决方案2】:

    Phpixie3:

    <?php
    // bundles/app/assets/config/orm.php
    return [
        'models' => [
            'person' => [
                'table' => 'people',
                // if you want to change id field also:
                'id'    => 'pid',
            ],
        ],
    ];
    

    致电:

    $builder->components()->orm()->query('person')->in(432)->findOne();
    

    应该变成

    SELECT * FROM person WHERE id=432;
    

    或者,如果您还覆盖了 id 字段:

    SELECT * FROM person WHERE pid=432;
    

    【讨论】:

      猜你喜欢
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多