Doctrine可以很方便的生成模型,方法也是有多种。本例按手册上的通过已存在的数据表来生成与之对应的模型 。
请确认是否已经有了名叫doctrine_test的数据表并且已经是当前所打开的库。费话少说,直接上手册的测试数据:
CREATE TABLE user (
id bigint(20) NOT NULL auto_increment,
first_name varchar(255) default NULL,
last_name varchar(255) default NULL,
username varchar(255) default NULL,
password varchar(255) default NULL,
type varchar(255) default NULL,
is_active tinyint(1) default '1',
is_super_admin tinyint(1) default '0',
created_at TIMESTAMP,
updated_at TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=InnoDB
运行语句,ok! user表已存在了doctrine_test数据库中,准备工作已经完成.
修改bootstrap.php内容为:
$conn = Doctrine_Manager::connection('mysql://root:123456@localhost/doctrine_test', 'doctrine');
然后需要在doctrine_test目录中创建一个名为models的子目录
$mkdir doctrine_test/models
(注:此目录应要有写入的权限,doctrine会将数据表对应的模型代码会写入该目录中)
在test.php文件中加入以下生成模型的代码:
Doctrine_Core::generateModelsFromDb('models', array('doctrine'),array('generateTableClasses' => true));
保存,运行test.php。模型生成
现在我们能在models目录中的generate子目录中看到BaseUser.php。这个表里面便是user表对应的完整模型,Doctrine还在这个文件中自动生成了一个setUp()函数。与此同时,在doctrine_test的models目录下会生成User.php和UserTable.php。为什么一个数据模型会同时生成三个文件呢,以后再边做测试边解释
看一下是具体是怎样运用Doctrine调用数据的:
在//models/User.php文件中新增一个SetPassword()函数,内容如下,照拿手册上的例子
class User extends BaseUser
{
public function setPassword($password)
{
return $this->_set('password', md5($password));
}
}
要让这个函数起作用,必須还要开启auto_accessor_override属性。现在在bootstrap.php中添加Doctrine_Core::loadModels('models'); 然后设置password时理应便会自动进行加密了.
下面贴出主要的代码:
//models/User.php
class User extends BaseUser
{
public function setPassword($password)
{
return $this->_set('password',md5($password));
}
}
//bootstrap.php
require_once(dirname(__FILE__) . '/lib/vendor/doctrine/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));
$manager = Doctrine_Manager::getInstance();
$conn = Doctrine_Manager::connection('mysql://root:123456@localhost/doctrine_test','doctrine');
$manager->setAttribute(Doctrine_Core::ATTR_VALIDATE,Doctrine_Core::VALIDATE_ALL);
$manager->setAttribute(Doctrine_Core::ATTR_EXPORT,Doctrine_Core::EXPORT_ALL);
$manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING,Doctrine_Core::MODEL_LOADING_CONSERVATIVE);
$manager->setAttribute(Doctrine_Core::ATTR_AUTOLOAD_TABLE_CLASSES,true);
$manager->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE,true);
Doctrine_Core::loadModels('models');
//test.php ,这个文件就是完全拿例子,作者的名字都不改
require_once('bootstrap.php');
$user = new User();
$user->username = 'jwage';
$user->password = 'changeme';
echo $user->password;
现在运行test.php,但是却得到了Fatal error
: Class 'User' not found in /home/www/example/doctrine_test/test.php
的
错误。多次查看文档感觉应该是没有什么错误呀,原本就是照着手册一步一步做的。google了很多也没有找到原因,最后还查看了symfony的Doctrineplugin配置文件进行对比,也没有解决问题。最后终于在Doctrine的官方论坛中找到了答案,
原因是因为model autoloader在我这个运行的Doctrine 1.2中没有被默认加载。那上面给出的解释是应该是修复这个bug了,但是我的这个环境里面却没有自动加载
在bootstrap.php文件中加入
spl_autoload_register(array('Doctrine_Core', 'modelsAutoload'));
再次运行test.php
搞定: 显示 4cb9c8a8048fd02294477fcb1a41191a
问题解决!
相关链接:
http://www.doctrine-project.org/jira/browse/DC-344
分享到:
相关推荐
主要介绍了Symfony2使用Doctrine进行数据库查询方法,结合实例形式总结分析了基于Doctrine的基本查询、DQL及查询生成器的基本实现方法,需要的朋友可以参考下
强大的 PHP 数据库抽象层 (DBAL),具有许多用于数据库模式自省和管理的功能。... Doctrine 2 数据库层可以独立于对象关系映射器使用。 为了使用 DBAL,您只需要 Composer 提供的类加载器,以便能够自动加载类。
DataDogAuditBundle, 存储 Doctrine ORM的所有数据库更改 审计包这个包为所有 Doctrine ORM数据库相关更改创建审核日志:插入和更新包括它们的差异和关系字段差异。许多到许多关系变化,关联和分离动作。如果有用户...
Laravel开发-lumen-oauth2-doctrine https://github.com/nordsoftware/lumen-oauth2模块的条令存储连接器。
我们将使用Doctrine DBAL,它是Doctrine框架的一个组件,该组件是PDO之上的数据抽象,也就是说,它进一步抽象了数据库的操作。 最终,他从后面使用了相同的PDO,但是它带来了关于查询处理的荒谬抽象。 要使用运行...
doctrine,最好的php ORM框架,很好用,大家试试。
现货DataMapper ORM v2.0 ... Spot的目标是成为一种清晰,高效且简单的轻量级DataMapper替代方案,并且不使用注释或代理类。... 创建一个新的Spot\Config实例,并添加带有DSN字符串的数据库连接,以便Spot可以建立数据库
教义休息 只需连接到数据库,即可轻松使用REST API生成器对于连接到具有良好规范化结构的现有数据库并快速从数据库中获取API而言,这非常有用。 在app / config / parameters.yml中设置数据库参数。 您的参数对于...
一个简单的数据库对象关系映射框架doctrine的使用demo
Doctrine2 ORM 官方文档 自己编译的
symfony 实战 for doctrine 中文版
Doctrine Cache是一个使用的php缓存类库
正如术语 ORM 已经暗示的那样,Doctrine ORM 旨在简化数据库行和 PHP 对象模型之间的转换。 因此,Doctrine 的主要用例是利用面向对象编程范式的应用程序。 对于主要不使用对象的应用程序,Doctrine ORM 不太适合。...
Doctrine是一个ORM(Object-relational mapper),提供php数据库和PHP对象的映射。他和其他的ORM一样都是为了保证持久层和逻辑层的分类而存在的。
zf-doctrine, 一个Zend框架 1.x 和 Doctrine 1.2集成 Doctrine 1与 Zend 框架集成项目试图提供 Doctrine 1与 Zend ... 以下组件属于这里集成:Zend_Application资源Zend框架模块项目支持用于 Doctrine 模型生成,迁移
dflydev-doctrine-orm-service-provider, Doctrine ORM服务提供商 Doctrine ORM服务提供程序为Pimple应用程序提供 Doctrine ORM实体管理器服务。特性利用核心 Doctrine 服务提供商( Silex ) 。默认的实体管理器可以...
Laravel开发-laravel-doctrine 网络工匠框架的ORM
Doctrine Cache是一个使用的php缓存类库,感兴趣的朋友们可以下载下来,用到自己的项目中。
Laravel开发-doctrine-repository 基于雄辩的简单查询的条令存储库