mar*_*ius 3 orm cakephp autoload cakephp-3.0 cakephp-3.x
我正在使用 cakephp CakePHP-orm的独立子项目“cakephp-ORM” 。
我在文档中找不到文件系统上定义表和实体的位置。
它解释了如何创建表,但没有解释将它们保存到哪里。然后会在自动加载时调用该表还是您必须自己要求/包含它们?文档章节
提前致谢!
你可能想在 GitHub 上创建一个问题,因为独立使用的文档肯定可以改进。
当独立使用时,ORM 将默认在Model\TableandModel\Entity命名空间中查找表和实体类,并且表类应使用Table后缀。因此 using$locator->get('Articles')将查找\Model\Table\ArticlesTable,如果存在这样的表类,则相应的实体类将被查找为\Model\Entity\Article。
这些与在 CakePHP 应用程序中使用 ORM 时存在的约定几乎相同,除了在 CakePHP 应用程序中通常有一个通过App.namespace配置选项配置的基本命名空间。您也可以将它与独立的 ORM 一起使用,即,如果您这样做:
\Cake\Core\Configure::write('App.namespace', 'MyApp');
Run Code Online (Sandbox Code Playgroud)
在查找类时,它将被拾取并添加到前面,在上面的示例中,这将是\MyApp\Model\Table\ArticlesTable和\MyApp\Model\Entity\Article。当这样的类不存在时,ORM 将使用所谓的泛型/自动表,即实例\Cake\ORM\Table而\Cake\ORM\Entity不是其具体子类。
在文件系统中放置文件的位置完全取决于您,您只需要确保它们可以通过这些名称自动加载。例如,如果您像这样使用 PSR-4 自动加载:
"autoload": {
"psr-4": {
"MyApp\\": "src/"
}
}
Run Code Online (Sandbox Code Playgroud)
那么相应的文件将是src/Model/Table/ArticlesTable.phpand src/Model/Entity/Article.php,并且您将配置基本命名空间,如上所示。
也可以对表和实体使用 FQN,例如:
$table = $locator->get('Articles', [
'className' => \Custom\Fully\Qualified\Name\To\ArticlesTable::class
]);
Run Code Online (Sandbox Code Playgroud)
实体和关联的自定义 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
]);
}
}
Run Code Online (Sandbox Code Playgroud)
因此$table将是 的实例\Custom\Fully\Qualified\Name\To\ArticlesTable,查询记录将返回\Custom\Fully\Qualified\Name\To\Article实例,而包含Comments将使用\Custom\Fully\Qualified\Name\To\CommentsTable.
考虑到这一点,您应该能够参考 CakePHP ORM 文档以进一步使用。