thinkphp5.0 模型的应用
1 <?php 2 namespace app\admin\controller; 3 use app\common\controller\BaseController; 4 use think\Db;//数据库操作类 5 use app\admin\model\Show as s; //引入自己创建的模型 6 use think\Loader;//模型类集合 7 8 class Show extends BaseController{ 9 10 public function message(){ 11 $where = array(); 12 $list = Db::name('show')->where($where)->select(); 13 $cout = Db::name("show") ->count(); 14 15 foreach($list as $k => &$v){ 16 $v['show_image_scr'] = $v['show_image_scr']; 17 $v['show_time'] = date("Y-m-d H:i",$v['show_time']); 18 } 19 $this->assign('list',$list); 20 $this->assign("cout",$cout); 21 return $this->fetch(); 22 } 23 24 public function addImage(){ 25 if(IS_POST) 26 { 27 $file = request()->file('img'); 28 if($file) 29 { 30 $str = HOMEPAGE_PATH. 'admin'; 31 $info = $file->rule('uniqid')->validate(['size'=>956780,'ext'=> IMAGE_SUFFIX])->move($str,true,false); 32 if($info){ 33 // 成功上传后 获取上传信息 34 // 输出 jpg 35 // echo $info->getExtension(); 36 // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg 37 $imgName = $info->getSaveName(); 38 // 输出 42a79759f284b767dfcb2a0197904287.jpg 39 // $info->getFilename(); 40 41 42 $str = HOMEPAGE_PATH.DS.$imgName; 43 $title = input('post.title'); 44 $content = input('post.content'); 45 $data = array(); 46 $data['show_image_scr'] = $str;//绝对路径->相对路径 47 $data['show_title'] = $title; 48 $data['show_content'] = $content; 49 $data['show_time'] = time(); 50 $info = Db::name('show') ->insert($data); 51 if($info == 1){ 52 $this->success('上传成功',url('admin/show/message')); 53 }else{ 54 $this->error('上传失败',url('admin/show/message')); 55 } 56 }else{ 57 // 上传失败获取错误信息 58 echo $file->getError(); 59 } 60 } 61 } 62 else 63 { 64 $where = array(); 65 // $where['show_id'] = 1; 66 // var_dump(Db::connect());//查看数据库配置 67 68 // $res = Db::query('select * from fanke_show where show_id = ?',[1]);//使用sql语句查询 69 // $res = db::name('show',[],false) -> where($where) -> select();//在数据库里面已经输入了前缀,在第三个参数传人false,则不会再每次调用的时候实例化 70 71 // $res = Db::execute('insert into fanke_show set show_id=?,show_image_scr=?,show_title=?,show_content=?,show_time=? ', 72 // [ 73 // '2', 74 // 'http://www.qq.com', 75 // '对!就是你', 76 // "你很帅帅!", 77 // 22 78 // ]);//使用sql语句插入数据 79 80 // $res = Db::table('fanke_show') -> where($where) -> select();//select 返回所有的记录 返回值得结果是一个二维数组 81 // $res = Db::table('fanke_show') -> where($where) -> find();//find 返回一条的记录 返回值得结果是一个一维数组,如果结果不存在,则返回null 82 83 // $res = Db::table('fanke_show') -> where($where) -> value('show_title');//value 返回的是一条记录 并且是字段记录的某个字段值 不存在的话则返回null 84 // $res = Db::table('fanke_show') -> where($where) -> column('show_title','show_title');//column 返回的是一维数组 数组里面的value值就是我们要获取的列的值 不存在的话则返回null 85 //----------------------------------------添加数据--------------------------------------------------------- 86 // $db = db::name('show');//这是方法我之前什么没有想到呢 87 //insert 插入数据 放回插入的行数 88 //insertGetId 插入数据 返回插入的行数和自增id 89 //insertAll 一次插入多条数据,返回插入成功的行数 90 91 92 // $where = null; 93 // $where['show_image_scr'] = '你'; 94 // $where['show_title'] = '很'; 95 // $where['show_content'] = '帅'; 96 // $where['show_time'] = 333; 97 // 98 // $res = $db -> insert($where);//插入数据 放回插入的行数 99 // $res = $db -> insertGetId($where);//插入数据 返回插入的行数和自增id 100 101 // $data = []; 102 // for($i = 0; $i<9;$i++){ 103 // $data[$i] = $where; 104 // } 105 106 // $res = $db -> insertAll($data); //一次插入多条数据,返回插入成功的行数 107 108 //--------------------------------数据库更新---------------------------------------------------------- 109 // $db = db::name('show'); 110 //update 更新一条数据 返回的是行数 111 //setField 只更新一个字段 112 //setInc 自增加 默认值为1, 返回的是影响的行数 113 //setDec 自减少 默认值为1 ,返回的是影响的行数 114 115 // update 116 // $res = $db ->where([ 117 // 'show_id' => 1 118 // ]) -> update([ 119 // 'show_image_scr' => '123', 120 // 'show_title' => '123', 121 // 'show_content' => '123', 122 // 'show_time' => '123' 123 // ]); 124 125 //setField 126 // $res = $db -> where([ 127 // 'show_id' => 5 128 // ]) -> setField( 129 // 'show_title','我是谁?'); 130 131 //setInc 132 // $res = $db ->where([ 133 // 'show_id' => 8 134 // ])->setInc('show_time',5); 135 136 //setDec 137 // $res = $db ->where([ 138 // 'show_id' => 8 139 // ])->setDec('show_time',5); 140 141 //--------------------------------数据删除---------------------------------------------------------- 142 //delete 删除一条数据 返回影响行数 如果你的条件是主键的话,可以直接在delete()方法传递数据 143 // $res = $db -> where([ 144 // 'show_id' => 10 145 // ])->delete(); 146 147 // $res = $db ->delete(11); 148 149 // $res = $db -> where(['1=1']) -> delete();//删除全部数据 150 151 //--------------------------------条件构造器--------------------------------------------------------- 152 //buildSql 返回sql输出语句 最后看会条件构造的视频 153 //EQ = 154 //NEQ <> 155 //GT > 156 //GET >= 157 //BETWEEN BETWEEW * AND * 之间 158 //NOTBETWEEN NOTBETWEEN *AND* 不在这之间 159 //IN IN(*,*) 160 //NOTIN NOT IN(*,*) 161 // $res = $db -> where([ 162 // 'show_id' => ['get',[1,10]], //and 163 // 'show_title' => '很' 164 // ])-> buildSql(); 165 166 167 //--------------------------------链式操作--------------------------------------------- 168 //看回视频吧 169 //field 170 //order 171 //limit 172 //page 173 // $res = $db 174 // -> where('show_time','eq','333') 175 // -> field('show_title') 176 // -> limit(4,5) 177 // -> select(); 178 179 180 //----------------------------------模型---------------------------------------------- 181 //获取模型 182 //最好使用前两种方式,这样可读性更高 183 // $res = s::get(3);//第一种 184 185 // $show = new s;//第二种 186 // $res = $show::get(1); 187 188 // $show = Loader::model('show');//第三种方法 以上两个都要use他们的模型,这个不用,只要use think\Loader,其他共有,适用于多个模型 189 // $res = $show::get(1); 190 191 // $show = model("show"); //这个不用use任何东西 192 // $res = $show::get(6); 193 194 195 196 //-------------------------------模型查询数据-------------------------------------------------- 197 // 查询单条数据 198 // $res = s::get(2); 199 // var_dump($res -> show_title); 200 201 // 查询单条数据 202 // $res = s::get(function($query){ 203 // $query -> where('show_id','eq','5') 204 // -> field('show_id'); 205 // }); 206 207 // 查询单条数据 208 // $res = s::where('show_id',2) 209 // ->field('show_id') 210 // ->find(); 211 212 // 查询多条数据 213 // $where = array(); 214 // $where['show_id'] = 2; 215 // $res = s::all($where); 216 // foreach($res as $k => $v) 217 // { 218 // $v = $v -> toArray(); 219 // var_dump($v); 220 // } 221 222 // 查询多条数据 223 // $res = s::all(function($query){ 224 // //这里面添加条件即可,不用select和find 225 // $query -> where('show_id','<',5); 226 // }); 227 // foreach($res as $k => $v) 228 // { 229 // $v = $v -> toArray(); 230 // var_dump($v); 231 // } 232 233 //查询多条数据 234 // $res = s::where('show_id','>',2) 235 // ->field('show_id') 236 // ->select(); 237 // foreach($res as $k => $v) 238 // { 239 // $v = $v -> toArray(); 240 // var_dump($v); 241 // } 242 243 //得到单条数据的字段 244 // $res = s::where(['show_id'=>1])->value('show_title'); 245 246 //得到多条数据的字段 第二个参数是设置下标key 247 // $res = s::column('show_content',"show_title"); 248 //-----------------------添加数据-------------------------- 249 //方法一 添加单条数据 250 // $where = array(); 251 // $where['show_title'] = '我是谁'; 252 // $where['show_content'] = '我在哪里'; 253 // $where['show_time'] = 123456789; 254 // $res = s::create($where,true);//true 将不是数据库的字段自动排除/如果是['show_title','show_content'] 他只会添加这两个字段的数据 255 256 //方法二 添加单条数据 257 // $show = new s; 258 // $show -> show_title = '来'; 259 // $show -> show_content = '这'; 260 // $show -> show_time = 123; 261 // $res = $show -> save(); 262 263 //方法三 添加单条数据 264 // $show = new s; 265 // //allowField() 将不是数据库的字段自动排除/如果是['show_title','show_content'] 他只会添加这两个字段的数据 266 // $res = $show -> allowField(true) -> save($where); 267 268 //添加多条数据 返回model对象 二维数组 269 // $show = new s; 270 // $res = $show -> saveAll([ 271 // ['show_title'=>'我哈哈'], 272 // ['show_title'=>'百事可乐'] 273 // ]); 274 // foreach($res as $k=>$v){ 275 // var_dump($v ->toArray()); 276 // } 277 278 //------------------------更新数据------------------------------------------ 279 //只是更新一些简单的数据才这样,因为更新两次的返回值都一样,所以无法判断是否更新 280 // 只要存在主键,就不必写条件 281 // $res = s::update([ 282 // 'show_id' => '20', 283 // 'show_title' => '6666', 284 // 'show_content' => '77777', 285 // 'show_time' => '8888' 286 // ]); 287 288 // $res = s::update([ 289 // 'show_title' => '6666', 290 // 'show_content' => '77777', 291 // 'show_time' => '8888' 292 // ],['show_id'=>5]); 293 294 // $res = s::update([ 295 // 'show_title' => '6666', 296 // 'show_content' => '77777', 297 // 'show_time' => '8888' 298 // ],function($query){ 299 // $query -> where('show_id','<',5); 300 // }); 301 302 //更新二 更新了就会返回影响的行数,否则就返回0 303 // $res = s::where('show_id','eq',5) 304 // -> update([ 305 // 'show_title' => '我是方法二' 306 // ]); 307 308 //更新三 更新了就会返回影响的行数,否则就返回0 309 // $model = s::get(1);//获取数据模型 310 // $model -> show_title = '123';//更改数值 311 // $res = $model -> save();//自动更新 312 313 //更新四 第二个参数是用于选择的 314 // $show = new s; 315 // $res = $show -> save([ 316 // "show_title" => '你妹的' 317 // ],[ 318 // 'show_id' => 1 319 // ] 320 // ); 321 322 //更新五 第二个参数是用于选择的 323 // $show = new s; 324 // $res = $show -> save([ 325 // "show_title" => '你妹的' 326 // ],function($query){ 327 // $query -> where('show_id','<',3); 328 // } 329 // ); 330 331 332 //----------------------------删除数据---------------------------------------- 333 //方法一 334 // $res = s::destroy(1); 335 // 方法二 336 // $res = s::destroy(['show_id'=> 2]); 337 //方法三 批量删除 338 // $res = s::destroy(function($query){ 339 // $query -> where("show_id",'>',5); 340 // }); 341 // 方法四 342 // $model = s::get(5); 343 // $res = $model -> delete(); 344 //方法五 345 // $res = s::where('show_id',5)->delete(); 346 347 348 //------------------------------模型聚合操作------------------------------------------- 349 // max 最大值 350 // min 最小值 351 // sum 总和 352 // avg 中间值 353 354 // $data = []; 355 // for($i=1;$i<10;$i++) 356 // { 357 // $data[] = [ 358 // "show_image_scr" => "我是".$i, 359 // "show_title" => "我是标题".$i, 360 // "show_content" => "我是内容".$i, 361 // "show_time" => $i*1000 362 // ]; 363 // } 364 // $show = new s; 365 // $res = $show -> saveAll($data); 366 // ---------------------- 一点关系都没有 -------------------------- 367 368 // $res = s::max('show_id'); 369 370 // $res = s::sum('show_id'); 371 372 // $res = s::avg('show_id'); 373 374 // $res = s::min('show_id'); 375 376 // $res = $res -> toArray(); 377 // ------------------------模型获取器--------------------------- 378 //需要对模型进行改写 379 380 // $res = s::get(8); 381 382 // $res -> show_sex;//model类改写过getShowSexAttr()方法 383 384 // var_dump($res -> toArray());//这里已经是应该model修改后的数据了 385 // var_dump($res -> getData());//获取原始数据 386 387 388 // -----------------------模型的修改 + 自动完成----------------------- 389 //修改需要再model里面编写 390 // $res = s::create([ 391 // "show_title" => '123', 392 // 'show_content' => '321', 393 // "show_image_scr" => '123', 394 // 'show_time' => '123', 395 // 'show_sex' => 1 396 // ]); 397 // var_dump($res -> toArray()); 398 399 400 // --------------------模型时间戳------------------- 401 // 具体的请查看model->show 402 403 404 // -----------------数据软删除--------------------- 405 // $res = s::destroy(7); 406 // var_dump($res); 407 // //已经不能获取这条数据了 408 // $res = s::get(7); 409 // var_dump($res);//null 410 // //如果真的要获取这条记录的话,可以: 411 // $res = s::withTrashed(true)->find(7); 412 // var_dump($res->getData());//获取原始数据 413 //我们删除的数据都在垃圾箱中,如果想要获取垃圾箱的全部数据,可以: 414 // $res = s::onlyTrashed() -> select(); 415 // foreach($res as $k => $v) 416 // { 417 // var_dump($v -> getData()); 418 // } 419 //如果我们真的要删除的话 420 //方法一 421 // $res = s::destroy(7,true); 422 // var_dump($res); 423 //方法二 424 // $show = s::get(8); 425 // $res = $show->destroy(true); 426 427 // return $this -> fetch(); 428 429 } 430 } 431 432 }
1 <?php 2 namespace app\admin\model; 3 use think\Model; 4 use traits\model\SoftDelete;//软删除 5 6 class Show extends Model 7 { 8 //名字规则 imooc_user -> User.php User 9 // imooc_user_info -> UserInfo.php UserInfo 10 11 12 // -------------------自动更新-------------------- 13 // //自动更新 自动触发 数据自动完成需要修改器配合才能完成操作 14 // protected $auto = [ 15 // //当数据写入,他会自动实行,达到自动的操作 16 // //实行的是setShowTimeAttr()方法 17 // 'show_time' 18 // ]; 19 // 20 // protected $insert =[ 21 // //当数据新增,他会自动实行,达到自动的操作 22 // 23 // ]; 24 // 25 // protected $update = [ 26 // //当数据更新,他会自动实行,达到自动的操作 27 // ]; 28 29 30 31 // -------------------模型获取器---------------------- 32 //get set 是不同的 get只是对读取出来的数据进行处理,并不改变他原来的值, set是直接改变他原来的值,然后直接存入数据库 33 // public function getShowSexAttr($val)//方法名是固定的: get + 字段名 + Attr 34 // { 35 // switch($val) 36 // { 37 // case $val == 1: 38 // return '男'; 39 // break; 40 // case $val == 2: 41 // return '女'; 42 // break; 43 // case $val == 0: 44 // return "保密"; 45 // break; 46 // } 47 // } 48 49 // ---------------模型修改器------------------- 50 // public function setShowTitleAttr($val,$data)//方法名是固定的: set + 字段名 + Attr 51 // { 52 // //$data 就是插入的全部数据 53 //// return md5($val); 54 // //用其他字段值代替show_title 55 // return $data['show_content']; 56 // } 57 58 // public function setShowTimeAttr($val) 59 // { 60 // return time(); 61 // 62 // } 63 64 65 //------------------模型时间戳----------------------- 66 //方法一 67 // 自动写入时间戳字段 false -> true 不建议开启这个功能 68 //'auto_timestamp' => true, 69 //当字段必须是create_time 和 update_time ,不然就会报错 70 71 //方法二 推荐使用这个方法 72 // protected $autoWriteTimestamp = true; 73 // protected $createTime = 'create_at'; //当为 false的时候,则不会设置,自动关闭 74 // protected $updateTime = 'update_at'; 75 76 77 // -------------------软删除------------------- 78 use SoftDelete; 79 //如果不是delete_time这个默认字段,可以修改其他名字: 80 // protected $deleteTime = 'delete_as'; 81 82 }