cakephp - 使用独立的 CakePHP ORM 时在哪里定义表/实体类?

标签 cakephp orm cakephp-3.0 autoload cakephp-3.x

我正在使用cakephp的独立子项目'cakephp-ORM' CakePHP-orm .

我在文档中找不到文件系统上定义表和实体的位置。

解释了如何创建表,但没有解释将它们保存到哪里。然后会在自动加载时调用该表还是您必须自己要求/包含它们? Documentation chapter

提前致谢!

最佳答案

您可能想创建一个问题 over at GitHub ,因为独立使用的文档肯定可以改进。

这些约定与 CakePHP 应用程序的约定类似

当独立使用时,ORM 默认情况下将在 Model\TableModel\Entity 命名空间中查找表和实体类,并且表类预计使用Table 后缀。因此使用 $locator->get('Articles') 会查找 \Model\Table\ArticlesTable,如果存在这样的表类,则相应的实体类将是查找为 \Model\Entity\Article

这些与在 CakePHP 应用程序中使用 ORM 时存在的约定几乎相同,只是在 CakePHP 应用程序中通常有一个通过 App.namespace 配置来配置的基本命名空间选项。您也可以将其与独立的 ORM 一起使用,即如果您这样做:

\Cake\Core\Configure::write('App.namespace', 'MyApp');

在查找类时,它将被拾取并添加到前面,在上面的示例中,这将是 \MyApp\Model\Table\ArticlesTable\MyApp\Model\Entity\Article 。当此类不存在时,ORM 将使用所谓的通用/自动表,即 \Cake\ORM\Table\Cake\ORM\Entity 的实例而不是其具体子类。

自动加载由您决定

将文件放置在文件系统中的位置完全取决于您,您只需确保它们可以通过这些名称自动加载。例如,如果您像这样使用 PSR-4 自动加载:

"autoload": {
    "psr-4": {
        "MyApp\\": "src/"
    }
}

那么相应的文件将是src/Model/Table/ArticlesTable.phpsrc/Model/Entity/Article.php,并且您将配置基础命名空间如上所示。

您可以使用完全限定名称,而不是遵循命名约定

还可以对表和实体使用 FQN,例如:

$table = $locator->get('Articles', [
    'className' => \Custom\Fully\Qualified\Name\To\ArticlesTable::class
]);

可以在相应的表类中设置实体和关联的自定义 FQN:

namespace Custom\Fully\Qualified\Name\To;

use Cake\ORM\Table;

class ArticlesTable extends Table
{
    public function initialize(array $config)
    {
        $this->setEntityClass(\Custom\Fully\Qualified\Name\To\Article::class);

        $this->hasMany('Comments', [
            'className' => \Custom\Fully\Qualified\Name\To\CommentsTable::class
        ]);
    }
}

因此$table将是\Custom\Fully\Qualified\Name\To\ArticlesTable的实例,查询记录将返回\Custom\Fully\Qualified\Name\To\Article 实例,并且包含 Comments 将使用 \Custom\Fully\Qualified\Name\To\CommentsTable

另请参阅

考虑到这一点,您应该能够引用 CakePHP ORM 文档以进一步使用。

关于cakephp - 使用独立的 CakePHP ORM 时在哪里定义表/实体类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51966314/

相关文章:

cakephp - 对于大型项目来说,CakePHP 和纯 PHP 哪个更好?

php - 不要删除 CakePHP 分页中事件页面上的 "a"链接

php - 在 Cakephp 中使用 javascript 获取日期值

.net - 您使用的 ORM 框架的最佳功能是什么

CakePHP 3 - 用户属于许多用户

css - cakePHP 内联显示表单元素

mySQL/Sequelize - 如何查询以获取字段为空数组的数据

java - H2 中 Hibernate ORM 的问题

cakephp - 保存与 Cakephp 3 的关联