php - Doctrine 延迟加载

标签 php doctrine

我刚刚开始掌握 Doctrine,并使用建议的延迟加载模型。根据教程,我创建了一个 Doctrine Bootstrap 文件:

<?php
require_once(dirname(__FILE__) . '/libs/doctrine/lib/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));
$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
$manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_CONSERVATIVE);
Doctrine_Core::loadModels(array(dirname(__FILE__) . '/models/generated', dirname(__FILE__) . '/models')); //this line should apparently cause the Base classes to be loaded beforehand

我的模型和基类都是由 Doctrine 创建的。

我还创建了一个简单的测试文件,如下所示:

<?php
require_once('doctrine_bootstrap.php');

$user = new User();
$user->email = 'test@test.com';
echo $user->email;

但是,这会产生以下错误:

Fatal error: Class 'User' not found in E:\xampp\htdocs\apnew\services\doctrine_test.php on line 4

但是,如果我明确需要 BaseUser.php 和 User.php 文件,那么它可以正常工作而不会出现任何错误

<?php
require_once('doctrine_bootstrap.php');
require_once('models/generated/BaseUser.php');
require_once('models/User.php');

$user = new User();
$user->email = 'test@test.com';
echo $user->email;

所以,似乎 Doctine 没有正确地自动加载模型。我错过了什么?

最佳答案

好的,所以您需要在 Bootstrap 文件中添加以下行:

spl_autoload_register(array('Doctrine_Core', 'modelsAutoload'));

然后自动加载按预期工作

关于php - Doctrine 延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3618307/

相关文章:

php - 执行 INSERT 查询时获取 MySQL 错误 1064

database - Doctrine 通配符 WHERE 查询?

mysql - Doctrine ORM 不会在从 YaML 规范生成的数据库中创建外键

php - 如何获得以星期日为开始日的周数?

javascript - yii2 ajax 请求重定向不起作用

PHP JSON返回字符串问题

php - 将静态值添加到 PDO 结果行

file-upload - symfony 4 上传

php - Zend Framework、phpUnit 和 Doctrine 导致问题

doctrine - 什么时候在 Doctrine2 中保持反向关系是值得的?