php框架orm技术,Fuel PHP框架ORM教程

ORM是什么

ORM是Object Relational Mapper的简称,他主要做两个事情:1.将数据的每一行映射成一个对象;2.允许你在这些对象之间建立关系;

介绍

不同于其他许多的ActiveRecord,我们实现主要追求精简、快速和易用。它竟可能容易试图让你创建、更新、删除数据库中的信息,处理这些主要是努力为了方便你在开发时候更好的处理数据。

安装

ORM包已经保函在下载的Fuel PHP包中,你只需要在配置中启用即可:

'packages'=>array(

'orm',

),

问题

这里列出一些常见的问题。

My relations/foreign keys aren't being saved (1)

This happens most often when you're using the wrong type of relationship. Especially Has-one and Belongs-to tend to get mixed up. Reread the examples in the docs to make sure you're using the correct relation types and check if everything is configured correctly.

I can't relate objects (2)

Make sure your model is extending Orm\Model and not Model_Crud.

I get an exception that my related model in a package/module can't be found

Make sure the package or module is loaded by Fuel, otherwise the Autoloader won't be able to find the class.

And when configuring the related model "model_to" make sure you configure the full classname, this includes the namespace even if you're in that namespace. Classnames in strings are always taken from global context, no matter the current namespace context.

I get an Orm\FrozenObject exception

Objects can't be edited while being saved to the database, that prevents circular saving and resaving already saved objects. This shouldn't happen during normal usage and is most often caused by faulty configuration of relations.

Sometimes this can be caused by a bug, especially when you're not using a stable release.

创建模型

创建一个模型需要花费一些时间,类名需要采用Model_前缀(举例:我们的文件名为article.php),文件存放在app/classes/model/,当然你可以根据自己需要任意命名。

classModel_ArticleextendsOrm\Model{}

注意:

以上仅适用于MySQL和MySQLi驱动,因为它需要从数据库获取模型属性。但这不是非常高效,因此放弃使用这种方式,因为你总是会需要一个额外的查询每个模型只是为了获取columnnames。

classModel_ArticleextendsOrm\Model

{

protectedstatic$_properties=array('id','title','contents','publish');

}

配置

我们需要配置模型的属性,我们可以使用public或者proteched,但不能使用private。

定义$_table_name

这个就是你需要操作的数据库 名称,如果为空,数据表名称则是你模型前缀后面的单词复数,例如“Model_Article”,那么数据表就是“articles”,如果不是,那我们就需要自定义配置:

classModel_ArticleextendsOrm\Model

{

protectedstatic$_table_name='myarticles';

}

定义$_primary_key

默认是array('id'),如果你的数据表主键不是,则需要重新定义:

classModel_ArticleextendsOrm\Model

{

protectedstatic$_primary_key=array('aid');

}

定义$_properties

这里已经有一个完整的属性例子,你可以参考这样配置,这里保函了字段类型,和校验规则:

classModel_ArticleextendsOrm\Model

{

protectedstatic$_properties=array(

'id',// both validation & typing observers will ignore the PK

'name'=>array(

'data_type'=>'varchar',

'label'=>'Article Name',

'validation'=>array('required','min_length'=>array(3),'max_length'=>array(20)),

'form'=>array('type'=>'text'),

'default'=>'New article',

),

'gender'=>array(

'data_type'=>'varchar',

'label'=>'Gender',

'form'=>array('type'=>'select','options'=>array('m'=>'Male','f'=>'Female')),

'validation'=>array('required'),

),

'created_at'=>array(

'data_type'=>'int',

'label'=>'Created At',

'form'=>array(

'type'=>false,// this prevents this field from being rendered on a form

),

),

'updated_at'=>array('data_type'=>'int','label'=>'Updated At')

);

}

$_has_one, $_belongs_to, $_has_many, $_many_many, $_many_through属性

CIT原创翻译|http://www.cit.cn/tech/develop/fuelphp/2012/0828/7914.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自主封装的PHP ORM框架,面向对象的PDO数据库操作,API框架,支持Get/Post/Put/Delete多种请求方式。 代码示例: <?php use Models\User; require '../application.php'; require '../loader-api.php'; //适合查询,如:获取用户列表或者单个用户信息 execute_request(HttpRequestMethod::Get, function() { $action = request_action(); //判断是否存在 if ($action == 1) { list($type, $value) = filter_request(array( request_int('type', 1, 2, 3), //1.用户名 2.邮箱 3.手机号 request_string('value'))); $type_field_map = array( 1 => User::$field_username, 2 => User::$field_email, 3 => User::$field_phone ); if ($type == 2 && !is_email($value) || $type == 3 && !is_mobilephone($value)) { die_error(USER_ERROR, $type_field_map[$type]['name'] . '格式无效'); } $user = new User(); $user->set_where_and($type_field_map[$type], SqlOperator::Equals, $value); $result = $user->exists(create_pdo()); echo_result($result ? 1 : 0); //存在返回1,不存在返回0 } //查询单条信息 if ($action == 2) { list($userid) = filter_request(array( request_userid())); //查询单条数据 $user = new User($userid); //set_query_fields可以指定查询字段,下面两种写法均可 //$user->set_query_fields('userid, username, email'); //$user->set_query_fields(array(User::$field_userid, User::$field_username, User::$field_email)); //还可设置where条件进行查询 //$user->set_where_and(User::$field_status, SqlOperator::Equals, 3); //$user->set_where_and(User::$field_truename, SqlOperator::IsNullOrEmpty); //$user->set_where_and(User::$field_age, SqlOperator::In, array(27, 29)); //$user->set_where_and(User::$field_regtime, SqlOperator::LessThan, '-6 month'); //创建数据库连接 $db = create_pdo(); $result = $user->load($db, $user); //也可以用Model类的静态方法 //$result = Model::load_model($db, $user, $user); if (!$result[0]) die_error(PDO_ERROR_CODE, '获取用户信息时数据库错误'); if (!$user) di
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值