1. 程式人生 > >Thinkphp5增刪改查操作(通過模型進行增刪改查)

Thinkphp5增刪改查操作(通過模型進行增刪改查)

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,

          ]);

   }

}