栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

ThinkPHP基础篇(模型篇)

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ThinkPHP基础篇(模型篇)

视图和 模板 视图view :为用户展示界面 通常的view层是一个界面 为用户展示数据 在index的控制器中 return view() 这个时候默认返回的index模块中view中的index.html 如果这个文件不存在就会报错 return view() ;
   参数 第一个是访问的路径 view()方法中可以添加参数 例如 view("upload") 就会去找view中的upload的文件  不传默认是view中的index
  参数  第二个参数是我们传递的值 是一个数组的形式 在目标文件中 我们可以使用{$参数名} 来接受
    view中接受的参数 {$a} 为什么可以使用大括号来接受呢?在配置文件中,配置了开始标签{和结束标签},有这2个标签可以自定识别他转换为对用的php
    代码,这个配置是可以改变的,{ } 这个里面接受$a变量的时候左右是不可以有空格的,配置文件中也定义了可以使用这个接受一些常量,还有我们也可以使用这个
    调用系统变量,比如Servier中一些信息,还可以获取请求中的一些值,还有cookie session
    view中接受的变量是可以再次调用方法来执行一些操作的,方法的操作是 |来跟上方法名来处理的
    {$a|方法名}  这样直接调用时默认的方法的第一个参数是$a 但是如果方法的参数有好几个,变量的位置不在第一个怎么办?
    我们就使用站位的方式  {$a|方法名='参数1','参数2',###} 使用三个#号来占位这个方法对应的位置
    另外,这个变量是可以参与计算的{$a+$b}的方式直接计算
    在HTML中,使用的注释  我们可以使用模板注释 {},这样查看源码的的方式是看不到注释的
还可以这样用
 可以使用$this->fetch() / $this->fetch("目标路径") 的方式,使用这个方法的好处是可以使用 $this->assign('a',100);的方式来传递值
 使用$this->fetch()这个方法需要注意的是 use thinkController 然后使用继承Controller
  这样就还有一个方法,但是不计划使用 $this->display()方法 使用的参数是一样的 和上面这个是一样的 ,但是不用传递第一个参数,第一个参数是指定访问的路径文件,上面那个不传有默认的view,但是不存在就会报错, 这个是不需要存在的,因为他已经和view中的index没什么关系了,脱离了 MVC框架的设计 ,所以不用他,代码多了维护的成本比较大
     控制器中向view中就是HTML中传递值的过程,{$a}的方式来接受变量值

    _STATIC_ _JS_ _CS_ 
模板的循环标签
     我们可以在控制器中直接传递list过来
     在view中怎么接受呢 volist
     {volist name='lsit' id='vo'}
     上面的name就是传递值使用的key 这是一个循环的标签,把每个值依次赋值在id='vo'中
     我们可以通过vo来取值 id就是指定变量值的
     

{$vo.name}

引用vo 直接输出每个vo中的名字属性 {/volist} //高级用法 我们可以继续指定offset=2 就是说我们需要从数组的第2个索引位置开始遍历 length可以指定长度 mod='2' 拿到当前的位置来对2取余,这个我想到了在android中设置列表适配的时候 我们会对2取余来判断当前的位置,在商品列表的那个地方,显示的第一个和第二个的view有点不一样,android中 是拿到适配器中当前位置的position来取余的,这里更简单,一般用来列表排版 如果;list为空,我们是可以在加上一个empty="没有数据" empty是不能直接使用标签的,但是他可以接受的是一个变量,我们可以传递过来一个标签 $empty="

空的数据

" 然后直接在empty="$empty" 我们也可以使用php模板 在上面直接定义 {php}$empty ="这里直接使用html的标签";{/php} 或者直接使用php的写法 这样也是可以的 {volist } 这个中间还有一些内置的变量 $i 当前的索引位置 这个是默认的,但是如果有冲突我们是可以定义它的 在{volist key="s"} 然后$s 就是替换了$i的功能 ,其实不写就是默认的key='i' {/volist} foreach标签 //基本用法 {foreach $lsit as $vo}

{$vo.name}

{/foreach} //更加深入的使用 {list name='list' item='vo'}

{$vo.name}

{/foreach} 这个是和上面的效果一样的 for 循环 {for start="1" end="10"}

{$i}

{/for} 每次+2 {for start="1" end="10" step="2"}

{$i}

{/for} 里面的$i是可以换的 name="k" {$k} 可以在建立循环的列表
    {for start="1" end="10" }
  • $i
  • {/for}
比较的标签 {eq name='a' value='10'} ///////value='$b' //这里是比较的相同的时候 {else/} //不相同的时候 {/eq} 上面的就是一个判断的标签 还有一个 equal 和eq一样样的 对应的标签是neq notequal 上面的判断是相同的或者不相同的情况 判断> gt >= egt 判断< lt <= elt 怎么判断多次呢?条件判断标签 就是使用switch {switch name="Think.get.level"} {case value="1"}

一级

{/case} {case value="2"}

2级

{/case} {case value="3"}

3级

{/case} {case value="4"}

4级

{/case} {/switch} 格式化后张这样 {switch name="Think.get.level"} {case value="1"}

一级

{/case} {case value="2"}

2级

{/case} {case value="3"}

3级

{/case} {case value="4"}

4级

{/case} {default /}

游客

{/switch} {range name='' value='1,100' type='in' }范围的判断;这里注意的是type = in notin between包含其实和结束值的 notbetween {defined name=''}判断某一个值是否定义 if标签 {if condition='($Think.get.level==1) AND (第二个条件)'}//定义条件 模板的布局 包含和继承 以后再看一次
模型篇
     数据库操作 thinkPHP模型(对db进行了又一次的封装)      
数据库的链接操作
     use thinkController;
     use thinkDb;
     继承Controller 
     Db::connect();这里其实并没有进行链接 只是惰性加载 只有在执行具体额操作的时候才会进行连接
     这里的参数可以可以传递一个数组进行配置 
查询数据
   选择表 我们可以使用table的方法和name方法 使用name的方法我们可以不需要添加数据库的前缀,如果有前缀并且数据库配置中配置了前缀
   这里是用table 或者是 name 使用name是可以直接传递数据的名字,而不是加上配置文件中配置的前缀的
   是使用table切必须添加前缀的
   使用name其实是自动去配置文件找有没有前缀的,然后添加上去的
查询sql
   $res = Db::query('select * from user where id=?', [1]); 第二个参数对应第一个参数中的? 位置一一对应
select
   $res   = Db::table('user')->select();  使用table的方法选择数据库
   $res   = Db::table('user')->where(["id" => 10])->select(); 可以添加条件 
   返回结果是二维数组,如不存在返回一个空的数组
find
    $res =    Db::table('user')->where(['id'=>1  ])->find(); 
    使用find 方法 返回的结果是一个1维数组
    这个方法只返回一条记录 在这里我们需要添加where条件 如果结果不存在 返回的是一个null值
    如果没有条件,默认排序是id最小的
value
     $res=  Db::table('user')->value('name');
     我们想得到数据库某个字段的值  也可以加where条件  只返回一条数据 如果结果不存在 返回null
column
     $res = Db::table('user')->column('password', 'name'); name就是对应的key值
     查询这一列的数据 返回的是一个一维数组  可以传递2个参数 如果存在
     第二个参数对应的就我们查询出来结果的key值 也是可以添加条件的
     如果结果不存在 返回的是空数组
添加数据
      
 提前选择数据表  $db = Db::name('user');  
insert 返回值是插入记录的条数
    $db->insert([   'name' => $key,
      'password' => md5($key)
]);
    返回值是插入记录的条数    
insertGetId 返回的结果是插入数据的自增id
    $res = $db->insertGetId([
   'name' => $key,
   'password' => md5($key)

      ]);
      返回的结果是插入数据的自增id
insertAll
      
      $data = [];
      for ($i = 0; $i < 10; $i++) {
   $key = '';
   for ($ii = 0; $ii < 11; $ii++) {
$key .= $pattern{mt_rand(0, 9)};    //生成php随机数
   }
   $data[] = [
'name' => $key,
'password' => md5($key)
   ];
      }
      //准备好数据了
      $res = $db->insertAll($data);
数据更新
 $db = Db::name('user');   
update
      
      $res = $db->where([
   'id' => 1
      ])->update([
   'name' => '13810916949'
      ]);
setField
      
      $db->where(['id' => 2])->setField('name', '13546123446');
setInc
      
      $db->where(['id' => 3])->setInc('num');
setDec
      
      $db->where(['id' => 4])->setDec('num');
数据库删除
    $db = Db::name('user');     
delete
      
      $res = $db->where(['id' => 1111])->delete();
条件构造器
  

  public function sqlbuild(){
      $db = Db::name('user');
      
      
     $sql= $db->where(
  [
      'id' => ['EGT',1]//条件是id>=1

  ]
     )->buildSql();

  }
总结
     数据库的操作无外乎就是增删改查
   1.  数据库的连接在thinkPHP中也是很简单的
     Db::connection方法是可以直接连接数据库的
     这个方法我们一般不使用,因为当我们执行其他的操作方法的时候,它会自动连接好了
   2.  在操作数据之前我们使用Db::name(表名) 这个方法来选择我们要操作的数据库表 ,这个返回的对象我们是可以直接操作的,另外还有一个table的方法
     ,这个方法需要传入的表名必须要添加前缀的,如果配置了前缀,使用name的方法会自动添加上前缀的名字
    3. 增:
     就是插入的方法 insert
     参数是一个对象的数组形式 [
     'name'=>'',password=>''
     ]  这个方法的返回值是插入记录的条数
     还有一个insertGetid
     这个方法操作是和上面的方法一样的额,返回值是操作的id
     还有一个insertAll方法,这个方法一般用来插入多条的数据 ,传入的参数是一个数组,返回的数据是插入的条数,我们可以拿着这个条数来判断当前的数据库是不是完全插入了数据
     和数据源做比较长度
  4.   删:
     删除相对来说就比较简单了一点就delete方法 ,这个方法注意的是要添加条件
  5.   改:
     就是执行数据库的更新操作 update
     简单的执行更新一条数据,我们添加where条件和一个要改变的参数就可以    $res = $db->where([
   'id' => 1
      ])->update([
   'name' => '13810916949'
      ]);
     我们还可以更新某个字段 setField$db->where(['id' => 2])->setField('name', '13546123446');
 也是比较简单的,返回的是影响的行数,没有被修改直接返回0

  6.   查:
     数据库的查询操作:select
     单一的一个结果查询,适应的方法是find 这个方法返回的是一个一维数组,查不到就返回空数组
     查询一个字段的值适应的方法是value ,返回一条数据,查不到就是null
     查询一列的数据适应的是column方法,返回的是一个一维数组,这个方法的第一个参数是我们查询的列,这个方法还可以添加第二个参数,第二个值会以
     key的形式返回给我们
     查询我想着最多的还是使用的select的方法,返回的值是一个数组

   7.  还学了一点条件构造器的知识:    $sql= $db->where(
  [
      'id' => ['EGT',1]//条件是id>=1

  ]
     )->buildSql();
     这个以后要是用到了再来看看视频 https://www.imooc.com/video/15179/0
 现在需要记住一点就是where是可以重复使用的
模型
     为什么使用模型?例如:在操作的时候一个用户的信息可能要操作的数据表有多个(user userinfo表) 在控制层中每次操作都执行两个数据库表的操作
     很不方便,我们可以创建模型,在模型中定义一个方法来操作数据库表,可以达到复用的效果  
什么是模型??
     简单的来说 模型就是项目中MVC结构的M层 model层
创建模型 在model模块中创建
     :model 的命名: 直接对应我们的数据库表名,
     然后继承下thinPHP的model,
     我们是可以直接调用数据库的数据,是不是方便了好多

     user表 ====> User.php
使用
     创建一个User.php的文件  命名空间写好,不然引用不到
     use thinkModel; 继承下Model
     在使用的地方 use appindexmodelUser 
     然后使用 User::get(传入id) 验证是否可以使用模型 
     1.我们可以使用 User::get()
     2.$user = new User;
     3.$user = Loader::model("User") 不需要引用
     4.$user = model("user")   不需要引用
     建议前2种方法 
使用模型查询数据
    1.$res = User::get(1) //参数是id 
  $res -> username  
  //参数可以这样传 闭包函数 
  User::get(function($query){
  $query->where("id","eq",1)
  ->field("id,username")
  }); 
    2.User::where("id",1)  //条件 
    ->field("id,username") //指定查询的属性
    ->find()
    3.获取多条记录 
     User::all("1,2,3,34,54,122") 传递的参数是查询的主键id  
     返回的结果是一个user对象的集合 
     User::all([1,23,43,43,2,34]) 传递的参数是查询的主键id  
     User::all(function($query){
     $query->where("id" ,">",5)
     ->field('''''')
     })
    4.User::where("id",">",10)
    ->链式操作 
    ->select()
     返回的结果是一个user对象的集合 
使用模型添加数据
    1. User::creat([
      "username" => "name"
      "password" => "password"
      ],true); 排除不想添加的字段 
      User::creat([
  "username" => "name"
  "password" => "password"
  ],["username"]); 指定添加的字段 

     2. $user = new User;   
      $user->username="name";
      $user->password="dfdsaf"
      $user->save()
      $user->id()获取添加的数据的id 
     3.   $user->save([
     "username" => "name"

     ])  
     //allowField(true) 这个可以排除不想添加的字段 参数也可以是一个数组
      $user->allowField(true) ->save([
"username" => "name"
"不存在的字段" => "324"
])  
     4.saveAll([
     [],
     []
     ])     

     $user = new User;   
 $user->   saveAll([
      [
      "username" => "name"
      "password" => "2312"
      ],
      [
      "username" => "name2"
      "password" => "2312""password" => "2312"
      ]
      ])     
使用模型更新数据
     1.update 
     2.借助 get() save()
     3.save 方法 指定条件  
使用模型删除数据
     1.destroy() 参数可以传入主键的值 也可以是闭包函数 
     2.delete {
      可以先获取对象后删除 
      也可以添加where条件
     }
模型聚合操作
     User::count()
     User::where("id",">",2)
  ->count(); 
     1.count 条数 
     2.max("num") 一个列中的最大值 
     3.sum("num") 求和 
     4.avg("num") 平均值    
     5.min 最小值 
     6.
模型获取器
  在模型中定义方法 getSexAttr($val){  对应属性字段   获取器的设置 
  switch ($val){
    case "1":
    return "男"; 
    break;
    case "2":
    return "女";
    break;
    default:
    return  "未知";
    break;
  }
  }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/228419.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号