【问题标题】:Doctrine lazy loading教义延迟加载
【发布时间】:2010-09-01 13:07:57
【问题描述】:

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

<?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 似乎没有正确地自动加载模型。我错过了什么?

【问题讨论】:

    标签: php doctrine


    【解决方案1】:

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

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

    然后自动加载按预期工作

    【讨论】:

      【解决方案2】:

      你的方法是正确的,因为 Doctrine 有它自己的加载功能:

      Doctrine::loadModels('models'); 
      Doctrine::loadModels('models/generated'); 
      Doctrine::loadModels('models/tables'); 
      ...
      

      这不是递归的,因此您需要添加包含映射/托管模型的文件夹。

      【讨论】:

        【解决方案3】:

        在 User.php 模型中,需要对位于顶部的 BaseUser.php 类进行要求。由于用户类扩展了BaseUser.php

        我遇到过这个问题,已经解决了。如果有一些我错过的东西不必手动包括在内,我会很感兴趣。试一试,看看它是否可以解决问题,而无需 User.php

        【讨论】:

        • 这部分工作,但我仍然需要在我的学说_test.php 文件的顶部 require_once('models/User.php')
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-04
        • 1970-01-01
        • 1970-01-01
        • 2023-02-11
        • 1970-01-01
        • 2015-03-27
        • 1970-01-01
        相关资源
        最近更新 更多