【三十二】thinkphp之連接數據庫、實例化模型


1.連接數據庫

Thinlphp內置了抽象數據庫訪問層,把不同的數據操作封裝起來。我們只需要調用公共的DB類進行操作即可。DB類會自動調用相應的數據庫驅動來處理。

在應用目錄/common/conf/config.php中設置

    // mysql全局配置定義    
    'DB_TYPE'=>'mysql', //數據庫類型
    'DB_HOST'=>'localhost', //服務器地址
    'DB_NAME'=>'test', //數據庫名
    'DB_USER'=>'root', //用戶名
    'DB_PWD'=>'', //密碼
    'DB_PORT'=>3306, //端口
    'DB_PREFIX'=>'', //數據庫表前綴
    // PDO專用配置
    // ps:3.2.3數據庫類和驅動采用PDO重寫了,因此無論是什么數據庫都是基於PDO實現的,所以DB_TYPE不再支持PDO設置
    // 3.21 DB_TYPE填寫pdo
    // 3.23填寫准確的類型mysql
    'DB_TYPE'=>'mysql', //數據庫類型
    'DB_USER'=>'root', //用戶名
    'DB_PWD'=>'', //密碼
    'DB_PREFIX'=>'', //數據庫表前綴
    'DB_DSN'=>'mysql:host=localhost;dbname=test;charset=UTF8',

應用目錄/Home/Controller/ModelController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
// 要引用Model模塊
use Think\Model;
class ModelController extends Controller {
    public function test($user,$pass){
       echo "user:".$user."<br/>pass:".$pass;
    }
    public function model1(){
        // 實例化一個Model對象
        $user=new Model('user1');
        var_dump($user->select());
    }
}

2.實例化模型

1.使用Model基類

<?php
namespace Home\Controller;
use Think\Controller;
// 要引用Model模塊
use Think\Model;
class ModelController extends Controller {
    public function model1(){
        // Model 基類可以傳遞三個參數:
        // Model(['模型名'],['數據表前綴'],['數據庫連接信息']);
        // 實例化一個Model對象,傳一個數據表名
        // ********方法一***********
        $user=new Model('elector','','mysql://root:@localhost/test');
        //顯示變量結構
        var_dump($user);
         // ********方法二***********
        $user=new Model('user1');
        // 打印出所有數據
        var_dump($user->select());
    }
}

2.使用M()方法

 $Demo = new Model();那么它等價於 $Demo = M();

  // 使用M方法不需要引入命名空間 (use Think\Model;)
       $user=M('elector');
        var_dump($user->select());

3.模型定義

  1. Model類的名字要與Controller類的名字一致
  2. 在model類中這個類的名字代表要查詢的表名字
  3. 在controller類中要引用model類
  4. 全部設置好了,就可以在瀏覽器訪問了

在Home目錄/Model下創建一個model類.(User1Model.class.php)

<?php
namespace Home\Model;
use Think\Model;
// 注意:這個User1Model的意思是要查詢的是表名為user1
class User1Model extends Model
{
}

在Home目錄/Controller下創建一個Controller類(User1Controller.class.php)

<?php
namespace Home\Controller;
use Think\Controller;
// 注意:要引用model類
use Home\Model\User1Model;
class User1Controller extends Controller {
    public function model1(){
        $user=new User1Model();
        var_dump($user->select());
    }
}

在common/conf/config.php

//頁面Trace,調試輔助工具
'SHOWPAGETRACE' =>true,

對表名、前綴、附加數據庫修改。代碼如下:

 model/User1Model.class.php

<?php
namespace Home\Model;
use Think\Model;
// 注意:這個User1Model的意思是要查詢的是表名為user1
class User1Model extends Model
{
    // 1.我們查詢語句為:SELECT * FROM `test.user1`
    // 重新定義表前綴
    protected $tablePrefix = 'abc_';
    // 重新定義表名
    protected $tableName = 'abc';
    // 重新定義完整的帶前綴的表名
    protected $trueTableName = 'user1';
    // 修改附加數據庫名
    protected $dbName = 'tp';
}

 4.使用D()方法

ThinkPHP 提供了 D()方法來直接是實例化模型類,並且還可以免去引入命名空間等操作

  model/User1Model.class.php

<?php
namespace Home\Controller;
use Think\Controller;
// 注意:要引用model類
use Home\Model\User1Model;
class User1Controller extends Controller {
    public function model1(){
        //實例化UserModel類
        $user=D('user1');
        var_dump($user->select());
    }
}

PS:使用 D()方法比直接使用模型類更加的智能.

如果在\Home\Model\UserModel 找不到該模型類,那么就會去公共模塊下找\Common\Model\UserModel 去找。

如果還找不到,就會直接實例化基類 Model()類,也就是等同於使用 M()方法

區別:

  1. D就是實例化一個基於Model文件的Model
  2. M則是通過直接實例化Model方法(ThinkPHP基類)來動態的實例化一個Model對象,即使這個對應的Model文件不存在

5.使用原生的 SQL 語句進行操作數據庫

        $user1=M();
        var_dump($user1->query('select * from user1 where id=1'));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM