php中orm模型,模型model

## 模型model

在看模型之前,我们先看一段yaf作者鸟哥在他自己博客里的一段文字吧:

> 还有不少同学问, 为什么Yaf没有ORM, 这里有俩方面的考虑:

首先, Yaf并不是万能的, 它只是解决了应用中, 最基本的一个问题, 就是框架带来的额外的性能开销, 然而这本部分的开销和你的应用实际的开销相比, 往往是很小的.

但是, Yaf却代表着一种精神, 就是追求简单, 追求高效, 追求:”简单可依赖”, 所以Yaf专注于实现最核心的功能, 提供最稳定的实现.

相比ORM, 如果要实现的很方便, 那必然会很复杂, 在当时的情况下, 实现ORM有可能会引入不稳定性

第二, 也是最重要的一点是PHP已经提供了对DB的一个轻度封装的PDO, 我认为直接使用PDO, 会更加简单, 更加高效, 我不希望提供一个复杂的ORM包装, 鼓励大家去抛弃简单的PDO而使用ORM. 所以, 最初的时候, Yaf并不包含ORM.

诚然, ORM可以提高开发效率, 尤其对于一些简单应用, 所以我想在后续的Yaf的版本中, 会考虑加入ORM, 但是那也绝对会是一个简单的ORM, 类似于Yaf的内建视图引擎: Yaf_View_Simple, 简单可依赖.

显然,目前yaf是没有内置的操作数据库类了,那只能自己diy了,yaf的model规则是,类名以Model为后缀,放在放置在models文件夹下面

下面我们来Diy:

#### 先在application.ini配置文件里添加数据库配置信息:

`db.type=mysql

db.host=localhost

db.database=test

db.username=root

db.password=123

db.charset = utf8

db.log = false

db.collation=utf8_unicode_ci

db.prefix =`

#### 在models文件夹下面新建一个base.php文件:

`<?php

class baseModel

{

protected $link;

//构造函数

public function __construct($db_config = array())

{

if(empty($db_config)){

$db_config = Yaf_Application::app()->getConfig()->db;

}

$this->link = $this->connect($db_config["host"], $db_config["username"], $db_config["password"], $db_config["database"]);

}

//数据库连接

public function connect($dbhost, $dbuser, $dbpw, $dbname, $charset = 'utf8')

{

$this->link = @mysqli_connect($dbhost, $dbuser, $dbpw, $dbname);

if (!$this->link)

{

return "database error:" . mysqli_connect_errno();

}

if (!@mysqli_select_db($this->link, $dbname))

{

return 'database error';

}

mysqli_query($this->link,"set names " . $charset);

return $this->link;

}

//查询

public function query($sql)

{

$query = mysqli_query($this->link, $sql);

return $query;

}

//获取全部记录

public function get_all($sql,$result_type = MYSQL_ASSOC) {

$query = $this->query($sql);

$i = 0;

$rt = array();

while($row =& mysqli_fetch_array($query,$result_type)) {

$rt[$i]=$row;

$i++;

}

return $rt;

}

public function add($data = array()){

return true;

}

}

?>`

当然,上面只是一个简单的数据库操作演示,因为懒,只做了连接数据,然后一个执行sql的query()方法。到这里我们就可以直接在控制器里调用这个model去操作数据库了。

### 在控制器中调用baseModel操作

`<?php

class IndexController extends Yaf_Controller_Abstract {

public function indexAction() {

Yaf_Dispatcher::getInstance()->disableView();

$mod = new baseModel();

$sql = 'select * from user';

$data = $mod->get_all($sql);

print_r($data);

}`

在控制器中使用$mod = new baseModel()实例化模型的时候,系统会自动加载model下面的base.php文件,无需手动加载。

如果我们在模型层还有其它的一些操作需求,那可以再扩展一下,比如说:

#### 在刚才的models文件夹下我们可以再新建一个user.php

`<?php

class UserModel extends baseModel{

//再这里就可以再定义这个模型下面的操作方法

}

?>`

这个模型只要指定继承刚才定义的baseModel,它就拥有了baseModel里面的所有方法,在控制器中使用UserModel:

`<?php

class IndexController extends Yaf_Controller_Abstract {

public function indexAction() {

$mod = new UserModel();

$sql = 'select * from user';

$data = $mod->get_all($sql);

print_r($data);

}`

### 载入第三方的ORM

上面只是一个简单的model实现方法,大家可以再自行完善。

在一些项目中,ORM可以提高开发效率,我这里也尝试着载入lavarel框架中所使用的Eloquent ORM。

Eloquent ORM操作介绍:http://www.golaravel.com/laravel/docs/4.2/eloquent/

因为下载有点慢,我就直接从laravel5.1的包里面直接复制出的eloquent。

#### 1、将文件夹放置到library下面,如下所示

![](https://box.kancloud.cn/2015-11-26_56567b1eda2f5.png)

#### 2、在Bootstarp.php初始化eloquent

`<?php

Yaf_loader::import("/vendor/autoload.php");

use Illuminate\Container\Container;

use Illuminate\Database\Capsule\Manager as Capsule;

class Bootstrap extends Yaf_Bootstrap_Abstract{

private $config;

public function _initConfig() {

$this->config = Yaf_Application::app()->getConfig();

Yaf_Registry::set("config", $this->config);

}

//载入数据库ORM

public function _initDatabase()

{

$database = array(

'driver' => $this->config->db->type,

'host' => $this->config->db->host,

'database' => $this->config->db->database,

'username' => $this->config->db->username,

'password' => $this->config->db->password,

'charset' => $this->config->db->charset,

'collation' => $this->config->db->collation,

'prefix' => $this->config->db->prefix,

);

$capsule = new Capsule;

// 创建链接

$capsule->addConnection($database);

// 设置全局静态可访问

$capsule->setAsGlobal();

// 启动Eloquent

$capsule->bootEloquent();

}`

#### 在models文件夹下新建UsersModel的Users.php:

`<?php

use Illuminate\Database\Eloquent\Model as Mymodel;

class UsersModel extends Mymodel{

protected $table = 'user';

}

?>`

#### 在控制器中调用:

`<?php

class IndexController extends Yaf_Controller_Abstract {

public function indexAction() {

Yaf_Dispatcher::getInstance()->disableView();

$mod = new UsersModel();

$data = $mod->find(1)->toArray();

print_r($data);

}`

更多关于Eloquent ORM的操作介绍可移步:http://www.golaravel.com/laravel/docs/4.2/eloquent/

  • 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、付费专栏及课程。

余额充值