`

在ECSHOP中使用laravel框架的orm组件 简化ecshop的二次开发

阅读更多

在长期的 ecshop二次开发中 我慢慢喜欢上了简单的php开发模式!可能是因为我最早是做前端开发的 ,php+smarty这种简单的组合让我更喜欢!要实现什么功能 只需要写个函数在 includes中 就可以轻松的引用了!

这些年 陆陆续续接触了很多PHP的框架,包括 ci symfony zf2  yii等等 甚至国产的thinkphp~~~ 对php的框架 我一直持观望的态度!也经常看到论坛里面  很多人为了证明某个框架更牛叉吵得面红耳赤。感觉比较可笑!我深信 每一种新的技术的产生 都是为了解决某类问题。

 

接触laravel之后 我很快喜欢上了这个php的框架!给人眼前一亮的感觉。基于稳定的symfony组件 加上非常容易上手 很快 我就想用laravel重写一遍 ecshop的前台所有文件!甚至我们下一步的所有php的项目都想换成这个框架!

php的ORM组件一直是我非常关注的!symfony里的doctrine 虽然也不错 但是太庞大 感觉不是很适合用在ecshop里面!使用完laravel的 Eloquent ORM后,感觉非常好!而且也比较轻量级!所以很快 我就用到了ecshop中!

 

首先 单独下载 Eloquent ORM

我们使用composer来安装 建立一个composer.json 文件

{    
     "require": { 
           "illuminate/database": "*" 
    }
}

 

然后运行:composer install

 然后就是等待 下载完成!

下载了一堆文件 ,截图如下:

 

主要的文件都在vendor里面  只需要引用这个文件夹即可

 

我们创建一个 database.php文件 文件内容见上面的截图!非常简单!

 

然后 我们开始在 ecshop中使用Eloquent ORM 来简化我们的ecshop开发!

 

比如:我想在ecshop后台增加一个财务管理记录!用来记录我们每天的收入记录!

 

我们把vendor和database.php 放到 includes目录下  通过如下代码来引用Eloquent ORM

include_once(ROOT_PATH .'includes/database.php');

 

简单说下 ecs_cw这个数据表的字段:

CREATE TABLE IF NOT EXISTS `ecs_cw` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `cw_name` varchar(255) NOT NULL,
  `price` decimal(10,1) NOT NULL,
  `cat_id` int(10) NOT NULL,
  `mw_date` int(10) NOT NULL,
  `kh_id` int(10) NOT NULL,
  `cw_tag` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

 也就主要的几个字段

 

id              收入编号

cw_name  收入记录名称

price          收入金额

cat_id        收入分类编号

mw_date   收入记录日期

kh_id         客户编号

cw_tag      收入标签,用于标记记录是否作废

 

cw.php里面 我们创建Cw类 通过这个类来操作sql 彻底告别在php代码中混入sql的混乱状态!!!

 

use Illuminate\Database\Eloquent\Model as mywebphpORM;

class Cw extends mywebphpORM {

      public $timestamps = false;
     //如果table之前设置了前缀 可以直接写 cw
      protected $table = 'ecs_cw';
      //如果主键不是id 可以单独指定
      //protected $primaryKey = 'cw_id';


}

 

说说最常见的CRUD操作

 

//增加

if($_REQUEST['act'] == 'add'){

    $cw_name  = trim($_POST['cw_name']);
    $price    = trim($_POST['price']);
    $cat_id    = intval($_POST['cat_id']);
    $mw_date   = trim($_POST['mw_date']);
    $mw_date   = strtotime($mw_date);

    $kh_id     = intval($_POST['kh_id']);


    $cw = new Cw();

    $cw->cw_name = $cw_name;
    $cw->price   = $price;
    $cw->cat_id  = $cat_id;
    $cw->mw_date = $mw_date;
    $cw->kh_id   = $kh_id;

    $cw->save();


    $id = $cw->id;

    if($id > 0){

        $info = '添加成功!';
    }else{

        $info = '添加失败!';
    }

  //模板赋值
    $smarty->assign('info',$info);
    $smarty->display('wyzx/cw_info.htm');


}

 

//编辑修改

 

elseif($_REQUEST['act'] == 'edit'){

    $id = intval($_GET['id']);



    $row = Cw::find($id);

    $row['cat_name'] = mw_get_cat_name($row['cat_id']);
    $row['mw_date_s'] = date('Y-m-d',$row['mw_date']);

    $row['kh'] = Cw::find($id)->kh;
    $kh_list = Kh::all();

    $smarty->assign('cat_list' ,mw_cat_list());
    $smarty->assign('kh_list',$kh_list);
    $smarty->assign('row',$row);
    $smarty->display('wyzx/cw_edit.htm');
}

 

编辑确认

elseif($_REQUEST['act'] =='edit_insert'){

    //把$_POST 专成变量
    extract($_POST);
    $mw_date = strtotime($mw_date);
    $row = Cw::find($id);

    $row->cw_name = $cw_name;
    $row->price   = $price;
    $row->cat_id  = $cat_id;
    $row->mw_date = $mw_date;
    $row->kh_id   = $kh_id;
    $row->cw_tag  = $cw_tag;
    if($row->save()){

        $info = '编辑成功!';
    }
    else{

        $info = '修改失败!';
    }

    $smarty->assign('info' ,$info);

    $smarty->display('wyzx/cw_info.htm');


}

 

删除

 

elseif($_REQUEST['act'] == 'del'){

    $id = intval($_GET['id']);


    $cw = Cw::find($id);


    if($cw->delete()){

        $info = '成功删除!';
    }
    else{

        $info = '删除失败!';
    }

    $smarty->assign('info' ,$info);
    $smarty->display('wyzx/cw_info.htm');
}

 

其他的更多orm操作可以参考 Eloquent手册

 

附件里面包含了Eloquent组件 单独下载包

 

http://laravel.com/docs/eloquent

 

 

 

 

2
0
分享到:
评论
3 楼 370517704 2014-04-21  
关联模型你是怎么处理的? 我测试之后发现hasOne 方法好像没法调用
2 楼 拜月小刀 2014-01-26  
uuleaf 写道
ecshop 已死,远离之

1 楼 uuleaf 2014-01-26  
ecshop 已死,远离之

相关推荐

    ecshoptk:借用ecshop模版,使用thinkphp开发一个商城系统

    并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性,扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多类型的案例可以确保稳定的商业以及门户级的开发。...

    基于thinkphp3.2.3大型商城开发完整笔记

    早期的思想架构来源于Struts,后来经过不断改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的Action和Dao思想和JSP的TagLib(标签库)、RoR的ORM映射和...

    ecshop2.7.3 数据库结构和数据结构说明

    在实际操作中,ECShop 2.7.3的数据结构还会涉及缓存管理,例如使用Memcached或Redis来缓存频繁访问的数据,以提高系统性能。此外,搜索功能可能利用全文索引,如Sphinx,以提供快速的商品搜索体验。 综上所述,...

    php网店源码

    在描述中提到,这个源码具有框架结构,意味着它是基于某种PHP框架构建的,如Laravel、Symfony或Yii等。这些框架提供了良好的组织结构和代码复用机制,使开发过程更高效且易于维护。源码被评价为“比ecshop写的强”,...

    thinkphp 应用

    ThinkPHP是一款免费开源的PHP开发框架,遵循Apache2开源协议发布。它适用于快速开发Web应用程序。ThinkPHP的核心特点是简单、高效,并且支持多种数据库系统。该框架旨在降低开发难度,提高开发效率,同时提供一套...

    基于PHP的翼起飞YunGou CMS 一元云购系统 php版.zip

    6. **库和框架**:可能使用了PHP框架如Laravel、Symfony或Yii,以提高开发效率和代码质量。这些框架通常提供了路由、依赖注入、ORM(对象关系映射)等功能。 7. **文档**:包括安装指南、API文档、使用手册等,帮助...

    康盛后台 创想 后台你编写

    在后台管理系统中,开发者通常会使用ORM(对象关系映射)工具,如Hibernate或MyBatis,将数据库操作与业务逻辑解耦。通过"后台你编写",初学者可以学习如何使用这些工具进行数据库操作。 操作日志记录了后台系统的...

    功能整理1

    在IT行业中,登录验证是网站安全的基础,尤其是在电商系统中,如ECShop V3.0.0版本。这个部分我们将详细探讨"功能整理1"所提及的登录验证相关方法,特别是`ucenter.php`文件中的`login()`函数。 ECShop是一款基于...

Global site tag (gtag.js) - Google Analytics