Thinkphp5增刪改查操作(通過模型進行增刪改查)
阿新 • • 發佈:2019-01-27
Thinkphp5怎麼通過模型增刪改查,非常簡單。
首先在application\index\controller目錄下建立控制器,命名為:Index.php
Index.php 程式碼如下,我這裡是在application\index\controller 模組下建立的控制器,如果不是index模組,你的名稱空間要改成自己模組對應的名稱空間。
<?php namespace app\index\controller; use app\index\model\Admin; class Index { public function index(){ Admin::index(); } }
接著在application\index\model 目錄下建立模型 ,命名為Admin.php
Admin.php 程式碼如下,我這裡是在application\index\model 模組下建立的模型,如果不是index模組,你的名稱空間要改成自己模組對應的名稱空間。
Admin.php (先講模型查詢操作)
<?php namespace app\index\model; use think\Model; class Admin extends Model { // 設定當前模型對應的完整資料表名稱 protected $table = 'user'; public static function index(){ $list = '14'; /* 單條資料查詢操作,all方法是tp5框架規定的查詢方法,all裡面是一個閉包,作為變數傳入, 不要糾結閉包構造,直接複製用即可,不需要關注$query是什麼?框架內部實現時傳值進去, 執行where方法,只需要關注where條件和傳的變數$list即可。 $list值自己可定 如上面$list = 14,id可自己定,查詢id=14這一條資料 */ $re = Admin::all(function($query) use ($list) { $query->where('id','=',$list); }); //echo '<pre/>';var_dump($re[0]->data); } }
<?php namespace app\index\model; use think\Model; class Admin extends Model { // 設定當前模型對應的完整資料表名稱 protected $table = 'user'; public static function index(){ $list = ['13','14']; /* 這是多條查詢,查詢id=13和14這兩條資料,同上述只需要關注where裡面的條件即可, 如果查name或其它欄位把where裡的id改成name即可,$list也封裝好了, 你可以傳值進去,就像我上面$list 等於一個數組,*/ $re = Admin::all(function($query) use ($list) { $query->where('id','in',$list); }); // echo '<pre/>';var_dump($re); } }
<?php
namespace app\index\model;
use think\Model;
use think\Db;
class Admin extends Model
{
public static function index()
{
/* join查詢,查詢兩個表以上的資料 Db::table 要加上use think\Db;
這裡查的是user表的id等於sessions表的id,兩個表裡的符合條件的全部資料 */
$re = Db::table('user')
->alias('a')
->join('sessions w','a.id = w.id')
->select();
// var_dump($re);die;
}
}
namespace app\index\model;
use think\Model;
use think\Db;
class Admin extends Model
{
// 資料表名 這裡要提一下,表名必須是完整的表名,要帶上表字首,哪怕在配置檔案裡面設定了表字首。
protected $table = 'fa_kindex';
// 查詢
public static function index()
{
// 如果要查詢一張表中所有欄位資訊,直接寫個閉包構造在裡面就可以了,
$result = Index::select(
function($query) use () {}
);
return $result;
//
$offset = 0,
$limit = 1,
$result = Index::select(
// use()裡面寫傳進閉包中的變數,如下面的 use ($offset , $limit)
function($query) use ($offset , $limit , $rid) {
/* 閉包構造 $query可以銜接order,limit,where,field等條件。但不能寫成
$query->select();因為這樣select方法會執行兩次 可以寫成
$query->order('id','asc'), //根據id升序查詢
$query->limit($offset , $limit)
$query->field('id',true); //查詢除id欄位外的所有欄位資料
// 查詢符合id = 1的id,name欄位的資料,查詢結果按id升序排列
$query->field('id','name')->where('id=1')->order('id','asc');
*/
$query->order('id','asc')->limit($offset , $limit)->field('id',true)->where('rid ='.$rid);
}
);
return $result;
}
}
當然,很多人說查詢後,得到的是類的物件,那是因為,tp3.2就是直接返回查詢結果,而tp5沒有直接返回查詢結果,返回的是整個例項化類,把查詢結果放到類的data屬性裡面,所以要取出資料怎麼取?想象一下例項化類後怎麼訪問類中的屬性,就不難理解了, 用->去取,
echo '<pre/>';var_dump($re[0]->data);
這樣就可以拿到資料了,跟tp3.2一樣,當然了我這是單條的,如果多條的話,$re的鍵值你可以迴圈的方式foreach去取。
Admin.php (模型刪除操作)
<?php
namespace app\index\model;
use think\Model;
class Admin extends Model
{
// 設定當前模型對應的完整資料表名稱
protected $table = 'user';
public static function index(){
$list = '14';
/*單條資料刪除操作 ,同上面的單條查詢一樣,只關注where條件和傳的變數$list即可
$list值自己可定 如上面$list = 14,id可自己定,刪除id=14這一條資料 */
Admin::destroy(function($query) use ($list) {
$query->where('id','=',$list);
});
}
}
<?php
namespace app\index\model;
use think\Model;
class Admin extends Model
{
// 設定當前模型對應的完整資料表名稱
protected $table = 'user';
public static function index(){
$list = ['1','3'];
/*多條資料刪除操作 ,同上面的多條查詢一樣,只關注where條件和傳的變數$list即可
$list值自己可定 如上面$list等於一個數組,id可自己定,刪除id=1和id=3兩條資料 */
Admin::destroy(function($query) use ($list) {
$query->where('id','in',$list);
});
}
}
Admin.php (模型修改操作)
<?php
namespace app\index\model;
use think\Model;
class Admin extends Model
{
// 設定當前模型對應的完整資料表名稱
protected $table = 'user';
public static function index(){
// 靜態方法裡執行非靜態方法,new static就是本類,reindex為本類的reindex方法
$method = new \ReflectionMethod(new static,'reindex');
$method->invokeArgs(new static,array());
}
public function reindex(){
$id = '5';
$username = 'Thinkphp';
/*
因為isUpdate方法是非靜態方法,只能用$this呼叫,根據手冊isUpdate(true)
是更新,isUpdate(false)是查詢,tp5方法有點多還有點亂,但不要緊實際寫業務邏輯時,
記住固定句型即可,像下面我們只關注save裡面傳入什麼東西即可,跟上面的where一樣,
將id=5這一行資料裡的username這個欄位的值改成$username。$username如上面
$username = 'Thinkphp';
*/
$this->isUpdate(true)
->save(['id' => $id, 'username' => $username]);
}
}
Admin.php (模型新增操作)
<?php
namespace app\index\model;
use think\Model;
class Admin extends Model
{
// 設定當前模型對應的完整資料表名稱
protected $table = 'user';
public static function index(){
$username = 'Thinkphp';
$passwd = '123456';
/* 增加一條資料,Admin::create(),呼叫框架靜態方法create,這裡提一下Admin
是你模型的名字,如果建立的模型是user,那就寫User::create(),
同樣只關注create裡改傳入什麼引數即可。新增一條資料,username插入值是$username
passwd插入值是$passwd,你可以根據自己需求制定欄位的值,別死板靈活點*/
Admin::create([
'username' => $username,
'passwd' => $passwd,
]);
}
}