query 查询类标签(用于前端遍历)

实例:

{query:name=goods}
{$item['name']}

{/query}

本人实际开发中书写代码应用


 ?>


分页:

{set:$page=IReq::get('page')==null?1:IReq::get('page');}//定义分页变量
{query:name=goods page=$page pagesize=5}
{$key}:{$item['name']}

{/query}
{$query->getPageBar()} //调用分页方法


数据库读取和写入:


IQuery类:

IQuery 提供了很丰富的属性和功能,通过简单的属性配置,就可以实现很多的SQL 查询功能,比如我们要查询商
品表(goods)里面的id=10 的商品,则:
$goodsDB = new IQuery(‘goods’);
$goodsDB->where = “id = 10”;
$goodsData = $goodsDB->find();
. find()就是执行查询最终数据的一个接口。

创建好IQuery 对象以后,就可以设置各种类属性来组合查询数据了。
主要属性列表如下:
属性名称数据类型说明
fields String 可选默认* 读取表的字段数据
where String 可选默认无查询条件
join String 可选默认无表连接操作,比如:
$db = new IQuery(‘goods as g’);
$db->join=”left join products as p on g.id = p.goods_id”;
$db->find();
group String 可选默认无表分组操作,比如:
$db = new IQuery(‘goods as g’);
$db->group = “price”;
$db->find();
having String 可选默认无表分组结果的筛选,设置group 属性才有意义
order String 可选默认无表排序字段
limit Int 可选默认20 条读取指定数量的条数
page Int 可选默认无设置分页。设置后IQuery 类库增加paging 属性(分页类)
pagesize Int 可选默认20 条每个分页显示的数据量,设置page 属性才有意义
pagelength Int 可选默认10 页显示多少页数,设置page 属性才有意义
cache String 可选memcache, 缓存查询结果提高效率,降低数据库压力。填写缓存的模式,前提是您的系统必须支持iWebShop 缓存技术

debug Int 可选默认0 关闭;1 开启调试SQL 语句,系统会自动输出完整的SQL 原生态语句


本人实际开发中书写代码应用

查询:

function give_goods_list(){
   $giveaway_Obj = new IQuery('giveaway');
   $giveaway_Obj -> where = "is_del = 0";
   $giveaway_infos = $giveaway_Obj -> find();
   $this->data = $giveaway_infos;
   $this->redirect('give_goods_list');
}


IModel类:

数据库写入一般用IModel 类,目前支持update(更新),add(添加),del(删除),dropTable(卸载
表),createTable(创建表)。
一般使用都是通过创建new IModel(表名)对象来创建的数据库实例,然后调用setData()接口进行数据设
置。
比如要更新goods 表的price 字段,那么就是:
$goodsDB = new IModel(‘goods’);
$goodsDB->setData(array(‘price’ => 1000));
$goodsDB->update(‘id = 2’);


方法名字数据类型说明
update($where,
$except=array()
)
$where:string 更新条件
$except:array 特殊表达式
字段(非字符串类型)
更新记录
通过$this->setData($array); $array(字段=>更新数据)
表更新字段对应数据关系
add() 添加记录
通过$this->setData($array); $array(字段=>添加数据)
表添加记录对应数据关系
del($where) $where:string 删除条件删除记录
把满足$where 条件的记录都删除

dropTable() 卸载表
把当前IModel 实例对应的表删除
createTable() 创建表
创建当前IModel 实例对应的表
通过$this->setData($array); 设置创建表元素(多维数组)
$array = array(
"column" => 字段配置array("type" => 数据类型,"default"
=> 默认值,"comment" => 字段注释,"auto_increment" =>
数值自增长)
"comment"=> 表注释
"index" => 表索引array("索引类
型:PRIMARY,KEY,UNIQUE" => "字段名称")

本人实际开发中书写代码应用

添加:

function supplier_edit_add()
{
   $id = IFilter::act(IReq::get('id'),'int');
   $company   = IFilter::act(IReq::get('firm_name'));
   $address = IFilter::act(IReq::get('address'));
   $pname  = IFilter::act(IReq::get('name'));
   $mobile = IFilter::act(IReq::get('mobile'));
   $phone  = IFilter::act(IReq::get('telephone'));
   $img = IFilter::act(IReq::get('img'));
   $account  = IFilter::act(IReq::get('account_num'));
       $bank   = IFilter::act(IReq::get('bank_name'));
   $province = IFilter::act(IReq::get('province'),'int');
   $city    = IFilter::act(IReq::get('city'),'int');
   $area     = IFilter::act(IReq::get('area'),'int');
   $_POST['area'] = "";
   if($province && $city && $area)
   {
      $_POST['area'] = array($province,$city,$area);
   }
   $user_id =$this->admin['admin_id'];
   $stock  = new IModel('supplier_list');
   $stock_Init =  array(
      'firm_name'    =>   $company,
      'area'         =>   $_POST['area'] ? ",".join(",",$_POST['area'])."," : "",
       'address'      =>   $address,
      'name'         =>   $pname,
      'mobile'       =>   $mobile,
      'telephone'    =>   $phone,
      'img'          =>   $img,
      'account_num'  =>  $account,
      'bank_name'    =>  $bank,
       'create_time'  =>   date('Y-m-d H:i:s',time()),
       'admin_id'     =>   $user_id
   );
   if($id){
      $stock->setData($stock_Init);
      $stock->update('id = '.$id);
   }else{
      $stock->setData($stock_Init);
       $stock->add();
   }

   $this->redirect('supplier_list');
}
删除:(注意:软删除,数据库保留)
function supplier_list_del(){
   $id = IFilter::act(IReq::get('id'),'int');
   $stock = new IModel('supplier_list');
   $stock->setData(array('is_del'=>1));
   if($id)
   {
      $stock->update(Util::joinStr($id));
   }else{
      die('请选择要删除的数据');
   }
   $this->redirect("supplier_list");
}

更新:

function suppliet_list_restore(){
   $id = IFilter::act(IReq::get('id'),'int');
   //生成goods对象
   $stock = new IModel('supplier_list');
   $stock->setData(array('is_del'=>0));
   if($id)
   {
      $stock->update(Util::joinStr($id));
   }
   else
   {
      die('请选择要恢复的数据');
   }

   $this->redirect("supplier_list");
}

原生态的SQL 可以用IDBFactory::getDB()->query($sql);此时可以直接写原生态的SQL 语句,但是要注意
SQL 语句中把表前缀增加上,因为IDBFactory 不会对$sql 有任何的修改,直接100%原样输送给mysql,当要执
行一些特殊的,复杂的SQL 可以使用此方法。

本人实际开发中书写代码应用

$sql_class = "SELECT zce.category_id,gs.brand_id,zc.parent_id from (zqwy_goods as gs left join zqwy_category_extend as zce on gs.id = zce.goods_id) left join
                            zqwy_category as zc on zce.category_id = zc.id WHERE gs.id =".$v['goods_id'].";";
$goods_class = IDBFactory::getDB()->query($sql_class);