专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016
微信咨询
|
联系我们
扫二维码关注公众号
网站首页
网站建设
短视频
网站推广
网站模板
客户案例
资讯动态
关于我们
网站首页
网站建设
短视频
网站推广
网站模板
客户案例
资讯动态
关于我们
CodeIgniter模型
当前位置:
网站建设
>
技术支持
CodeIgniter模型
资料来源:网络整理
时间:
2023/2/14 0:06:41
共计:
3628
浏览
MVC中的业务逻辑放在控制器中或者模型里都是不合适的,所以这里对业务逻辑进行了分离,多出一层用来处理业务逻辑,模型就只当作数据访问层,这样子模型将会变得比较轻。CI中并未通过实体对象来传参,参数的传入和返回都由开发者控制,比较灵活。很多情况下都会以数组的方式传入或者返回。
模型的使用也比较简单,这里只提一下使用前想到的几个问题吧。
1、既然已经有了数据访问层了,那我们就应当避免在控制器或者某些类中直接通过SQL查询数据库,所有的数据库访问操作都应当经过模型获取,大多数情况下一个表名对应着一个模型类。
2、模型应当很方便的连接多个数据库,在database配置文件中有谈到多个库的配置问题,根据group_name的不同可以很方便的连接不同的库。如果有主从,还可以考虑到主从的切换使用问题。
3、模型是否还要按模块区分?在控制器中存在公用控制器分发的做法,在模型中这种思维可能不太好,但可以通过继承不同的公用模型类来实现,这些类再继承CI的MY_Model。在某些业务下根据模块来继承可能比较有用,大部分情况可以直接继承MY_Model,MY_Model主要实现数据库的初始化连接以及一些公用方法。
4、数据库提供的操作方式都是比较基础的,需要我们根据自身的需求去组装,但在我们日常操作中很多操作是类似的,如,根据主键获取信息,根据ID获取信息,根据属性获取信息等,可以对这些基础的操作在进行一次封装,更方便使用。因为如果要使用AR的方式来操作数据库,需要记住很多的方法,如我们根据用户名查询:
PHP
复制代码
$query
=
$this
->
db
->
from
(
'user'
)
->
where
(
array
(
'username'
=>
'BobbyPeng'
)
)
->
get
(
)
;
return
$query
->
row_array
(
)
;
复制代码
如果封装后,则只需要记住一个方法即可,如:
PHP
复制代码
public
function
findByAttributes
(
$where
=
array
(
)
)
{
$query
=
$this
->
db
->
from
(
$this
->
tableName
(
)
)
->
where
(
$where
)
->
get
(
)
;
return
$query
->
row_array
(
)
;
}
复制代码
这样子在每个模型中添加一个tableName的方法返回表名后,再通过模型就可以很方便的使用该方法了。
5、上面的方法属于一个公用方法,我们会写在MY_Model中,但这种类似的方法会很多,我们可否将该类型的方法独立于一个文件中?因为这种方法大部分情况下是不会改的,而放在MY_Model中则表示对它的修改开放了,可能会影响到这些方法。如果说该类叫ActiveRecord类,那可以让MY_Model继承ActiveRecord类,而ActiveRecord类继承CI_Model,参考代码见后面。
很多时候类库提供给我们的方法都是比较细的,我们可以封装一下,减少使用难度。关于模型中公用方法的封装一直还在考虑中,下面给出的只是一个针对单表的简单的操作,复杂的操作就得在特定的模型中实现,还有一些公用操作或者说非AR的操作方式可以统一下,看以后是否有机会再来考虑下这个问题。
公用AR封装类,可进行常用的操作,需要赋予db属性为数据库连接对象,并在模型中设置几个方法,如主键、表名
PHP
复制代码
<?php
if
(
!
defined
(
'BASEPATH'
)
)
exit
(
'No direct script access allowed'
)
;
class
ActiveRecord
extends
CI_Model
{
/**
* 保存数据
*
* @param array $data 需要插入的表数据
* @return boolean 插入成功返回ID,插入失败返回false
*/
public
function
save
(
$data
)
{
if
(
$this
->
db
->
set
(
$data
)
->
insert
(
$this
->
tableName
(
)
)
)
{
return
$this
->
db
->
insert_id
(
)
;
}
return
FALSE
;
}
/**
* Replace数据
* @param array $data
*/
public
function
replace
(
$data
)
{
return
$this
->
db
->
replace
(
$this
->
tableName
(
)
,
$data
)
;
}
/**
* 根据主键更新记录
*
* @param string $pk 主键值
* @param array $attributes 更新字段
* @param array $where 附加where条件
* @return boolean true更新成功 false更新失败
*/
public
function
updateByPk
(
$pk
,
$attributes
,
$where
=
array
(
)
)
{
$where
[
$this
->
primaryKey
(
)
]
=
$pk
;
return
$this
->
updateAll
(
$attributes
,
$where
)
;
}
/**
* 更新表记录
*
* @param array $attributes
* @param array $where
* @return bollean true更新成功 false更新失败
*/
public
function
updateAll
(
$attributes
,
$where
=
array
(
)
)
{
return
$this
->
db
->
where
(
$where
)
->
update
(
$this
->
tableName
(
)
,
$attributes
)
;
}
/**
* 根据主键删除数据
*
* @param string $pk 主键值
* @param array $where 附加删除条件
* @return boolean true删除成功 false删除失败
*/
public
function
deleteByPk
(
$pk
,
$where
=
array
(
)
)
{
$where
[
$this
->
primaryKey
(
)
]
=
$pk
;
return
$this
->
deleteAll
(
$where
)
;
}
/**
* 删除记录
*
* @param array $where 删除条件
* @param int $limit 删除行数
* @return boolean true删除成功 false删除失败
*/
public
function
deleteAll
(
$where
=
array
(
)
,
$limit
=
NULL
)
{
return
$this
->
db
->
delete
(
$this
->
tableName
(
)
,
$where
,
$limit
)
;
}
/**
* 根据主键检索
*
* @param string $pk
* @param array $where 附加查询条件
* @return array 返回一维数组,未找到记录则返回空数组
*/
public
function
findByPk
(
$pk
,
$where
=
array
(
)
)
{
$where
[
$this
->
primaryKey
(
)
]
=
$pk
;
$query
=
$this
->
db
->
from
(
$this
->
tableName
(
)
)
->
where
(
$where
)
->
get
(
)
;
return
$query
->
row_array
(
)
;
}
/**
* 根据属性获取一行记录
* @param array $where
* @return array 返回一维数组,未找到记录则返回空数组
*/
public
function
findByAttributes
(
$where
=
array
(
)
)
{
$query
=
$this
->
db
->
from
(
$this
->
tableName
(
)
)
->
where
(
$where
)
->
limit
(
1
)
->
get
(
)
;
return
$query
->
row_array
(
)
;
}
/**
* 查询记录
*
* @param array $where 查询条件,可使用模糊查询,如array('name LIKE' => "pp%") array('stat >' => '1')
* @param int $limit 返回记录条数
* @param int $offset 偏移量
* @param string|array $sort 排序, 当为数组的时候 如:array('id DESC', 'report_date ASC')可以通过第二个参数来控制是否escape
* @return array 未找到记录返回空数组
*/
public
function
findAll
(
$where
=
array
(
)
,
$limit
=
0
,
$offset
=
0
,
$sort
=
NULL
)
{
$this
->
db
->
from
(
$this
->
tableName
(
)
)
->
where
(
$where
)
;
if
(
$sort
!==
NULL
)
{
if
(
is_array
(
$sort
)
)
{
foreach
(
$sort
as
$value
)
{
$this
->
db
->
order_by
(
$value
,
''
,
false
)
;
}
}
else
{
$this
->
db
->
order_by
(
$sort
)
;
}
}
if
(
$limit
>
0
)
{
$this
->
db
->
limit
(
$limit
,
$offset
)
;
}
$query
=
$this
->
db
->
get
(
)
;
return
$query
->
result_array
(
)
;
}
/**
* 统计满足条件的总数
*
* @param array $where 统计条件
* @return int 返回记录条数
*/
public
function
count
(
$where
=
array
(
)
)
{
return
$this
->
db
->
from
(
$this
->
tableName
(
)
)
->
where
(
$where
)
->
count_all_results
(
)
;
}
/**
* 根据SQL查询, 参数通过$param绑定
* @param string $sql 查询语句,如SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?
* @param array $param array(3, 'live', 'Rick')
* @return array 未找到记录返回空数组,找到记录返回二维数组
*/
public
function
query
(
$sql
,
$param
=
array
(
)
)
{
$query
=
$this
->
db
->
query
(
$sql
,
$param
)
;
return
$query
->
result_array
(
)
;
}
}
/* End of file ActiveRecord.php */
/* Location: ./application/core/database/ActiveRecord.php */
复制代码
MY_Model可以继承该类,这样子模型中可以直接调用上面的方法。
PHP
复制代码
<?php
if
(
!
defined
(
'BASEPATH'
)
)
exit
(
'No direct script access allowed'
)
;
require_once
APPPATH
.
'core/database/ActiveRecord.php'
;
class
MY_Model
extends
ActiveRecord
{
public
function
__construct
(
$group_name
=
''
)
{
$this
->
initDb
(
$group_name
)
;
parent
::
__construct
(
)
;
}
protected
function
initDb
(
$group_name
=
''
)
{
$db_conn_name
=
$this
->
getDbName
(
$group_name
)
;
$CI
=
&
get_instance
(
)
;
if
(
isset
(
$CI
->
{
$db_conn_name
}
)
&&
is_object
(
$CI
->
{
$db_conn_name
}
)
)
{
$this
->
db
=
$CI
->
{
$db_conn_name
}
;
}
else
{
$CI
->
{
$db_conn_name
}
=
$this
->
db
=
$this
->
load
->
database
(
$group_name
,
TRUE
)
;
}
}
}
/* End of file MY_Model.php */
/* Location: ./application/core/MY_Model.php */
复制代码
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
相关主题:
网页设计怎样分块
博客网页设计教程
小学网页设计比赛
网页设计 内部链接
活动专题网页设计
网页设计的css
网页设计高清背景
网页设计模板狭窄
网页设计连接滑块
网页设计具体流程
·上一条:
sqlsrv_query
|
·下一条:
CodeIgniter控制器
同类资讯
sqlsrv_query
sqlsrv_rollback
sqlsrv_rows_affected
sqlsrv_send_stream_data
sqlsrv_server_info
解决在IIS6中asp站点设置启用默认内容文档*.asp无效的方法
CodeIgniter项目初始化之目录结构
CodeIgniter项目初始化之环境配置、SVN配置
CodeIgniter项目初始化之权限、调试
CodeIgniter配置之autoload
sqlsrv_field_metadata
sqlsrv_free_stmt
sqlsrv_get_config
sqlsrv_configure
sqlsrv_get_field
sqlsrv_has_rows
sqlsrv_next_result
sqlsrv_num_rows
sqlsrv_num_fields
sqlsrv_prepare
资讯动态
公司新闻
互联网资讯
电商资讯
优化推广
技术支持
关于我们
公司简介
企业文化
服务项目
公司新闻
服务项目
网站建设
网站推广
品牌策划
移动应用
服务支持
在线咨询
服务流程
产品报价
售后服务
联系我们
代理加盟
付款方式
在线留言
联系方式
联系方式
电话:400-683-0016
邮箱:sales@gzit.cn
QQ:250211130
微信:18520775521
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有
粤ICP备16019765号
广州京杭网络科技有限公司 版权所有
返回顶部
400-683-0016
在线咨询
微信二维码