我正在使用cakephp的独立子项目'cakephp-ORM' CakePHP-orm .
我在文档中找不到文件系统上定义表和实体的位置。
解释了如何创建表,但没有解释将它们保存到哪里。然后会在自动加载时调用该表还是您必须自己要求/包含它们? Documentation chapter
提前致谢!
最佳答案
您可能想创建一个问题 over at GitHub ,因为独立使用的文档肯定可以改进。
这些约定与 CakePHP 应用程序的约定类似
当独立使用时,ORM 默认情况下将在 Model\Table
和 Model\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.php
和src/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/