TP5學習記錄(Model篇)


ThinkPHP

數據庫操作

數據庫連接

#在config/database.php設置數據庫連接參數或者利用Db::connect()方法設置數據庫連接

/*
 * public static function connect($config = [], $name = false)
 * 數據庫初始化,並取得數據庫類實例
 * $config:數據庫配置信息數組,可以在該方法里面進行配置
 */
#
var_dump(Db::connect());

 

數據庫查找

query:直接操作sql語句

/*
 * mixed query(string $sql, array $bind = [], boolean $master = false, bool $pdo = false)
 * 描述:SQL查詢語句,然后array類型
 * $sql:SQL語句字符串
 * $bind:SQL語句中綁定的字符串
 */
$res = Db::query('select * from book where id=?', [1001]);    

 

常用查詢語句

# select 返回所有記錄,返回的結果是一個二維數組
# 如果結果不存在,返回一個空數組'[]'
$res = Db::table('book') ->where([
    'id'    => '1001'
])->select();

$res = db('book') ->where([
    'id'    => '1001'
])->select();   #功能同上

# find 返回一條記錄,返回的結果是一個一維數組
# 如果結果不存在,返回null
$res = Db::table('book') ->where([
    'id'    => '1002'
])->find();

$res = db('book') ->where([
    'id'    => '1001'
])->find();     #功能同上

# value 返回一條記錄,並且是這條記錄的某個字段值
# 如果結果不存在,返回null
$res = Db::table('book') ->where([
    'id' => '1001'
])->value('name');

$res = db('book') ->where([
    'id'    => '1001'
])->value('name');     #功能同上

# column 返回一個一緯數組,數組中的value值就是我們要獲取列的值
# 如果結果不存在,返回空數組'[]'
$res = Db::table('book') -> where([
    'id' => '1001'
]) -> column('name');

$res = db('book') ->where([
    'id'    => '1001'
])->column('name');     #功能同上

 

數據庫添加
execute:直接操作sql語句

/*
 * integer execute(string $sql, array $bind = [], boolean $fetch = false, boolean $getLastInsID = false, string $sequence = null)
 * 描述:SQL更新語句
 * $sql:SQL語句字符串
 * $bind:SQL語句中綁定的字符串
 */
$res = Db::execute('select * from book where id=?', [1002]);

 

常用插入語句

public function insert()
{
    //指定數據庫表,獲取表資源
    $db = Db::name('book');

    # $db ->insert():插入單條記錄,返回是影響記錄的行數
    # $db ->insertGetId():插入單條記錄,返回的是插入記錄的id
    # $db ->insertAll():批量插入

    //inset 返回值是影響記錄的行數,插入數
    $res = $db ->insert([
        'id'        => '1005',
        'name'      => '書籍5',
        'type_id'   => '1',
        'author'    => '趙六',
        'press'     => '牛津大學出版社'
    ]);
    
    dump($res);
}

 

數據庫更新

public function update()
{
    //指定數據庫表
    $db = Db::name('book');

    # $db->update()
    # 更新記錄某一個或幾個字段,返回值為影響記錄的行數
    $res = $db ->where([
        'id' => 1001
    ])->update([
        'author' => '比克'
    ]);

    # $db->setField()
    # 更新記錄下某一個字段的值,返回值為影響記錄的行數
    $res = $db ->where([
        'id' => 1001
    ])->setField('name', '書籍111');

    # $db->setInc()
    # 更新記錄下某一個字段按固定步長增長,返回值為影響記錄的行數
    $res = $db ->where([
        'id' => 1001
    ]) ->setInc('type_id', '2');

    # $db->setDec()
    # 更新記錄下某一個字段按固定步長減小,返回值為影響記錄的行數
    $res = $db ->where([
        'id' => 1001
    ]) ->setDec('type_id', '2');

    dump($res);
}

 

數據庫刪除

public function delete()
{
    //指定數據庫表
    $db = Db::name('book');

    #返回值為影響記錄的行數
    $res = $db->where([
        'id' => 1001
    ])->delete();

    #如果where條件中是主鍵,則可以寫為:
    $res = $db->delete('1002');

    dump($res);
}

 

鏈式操作

$res3 = Db::table('book')
        -> where('id', '>', '1004')     #查詢條件where($field, $op, $condition)
        -> field('name, press')         #過濾條件field
        -> order('id DESC')             #排序方式order,DESC降序,ASC升序
       # -> limit(3, 5)                  #記錄條數限制limit
       # -> page(2,5)                    #分頁功能page
        -> group('press')               #分組group
        -> select();

 

模型

獲取model對象

public function requireModel()
{
    #方式1:使用助手函數獲取model實例對象
    $book = model('Book');
    $book1 = $book::get('1001');

    #方式2:使用Loader獲取model實例對象
    $book = Loader::model('Book');
    $book2 = $book::get('1001');

    #方式3:使用new方法獲取實例對象
    $book = new Book();
    $book3 = $book::get('1001');

    #方式4:靜態方法直接獲取實例對象(推薦使用)
    $book4 = Book::get(1001);

    dump($book1->toArray());
    dump($book2->toArray());
    dump($book3->toArray());
    dump($book4->toArray());
}

 

模型查詢數據

public function getBook($bookId)
{
    #get進行查找單條記錄
    $book = Book::get($bookId);             #方法1
    $book = Book::get(function ($query){    #方法2
        $query->where('id', '>', 1001)
            ->field('name');
    });
    $name = $book->name;        #調用模型的屬性
    $res = $book->toArray();    #將模型轉換為數組

    #get獲取批量記錄
    $books = Book::all();
    $book = Book::all(function ($query){    #方法2
        $query->where('id', '>', 1001)
            ->field('name');
    });
    foreach ($books as $value)
    {
        #遍歷循環打印
        #dump($value->toArray());
    }

    #和Db相似的鏈式方法:find()方法查找單條記錄
    $res = Book::where('id', '=', '1001')
            ->field('name, author')
            ->find();
    #dump($res->toArray());

    #select()方法查找多條記錄
    $res = Book::where('id', '>', '1001')
        ->field('name, author')
        ->select();
    foreach ($res as $value)
    {
        #遍歷循環打印
        #dump($value->toArray());
    }

    #value():獲取單條記錄某個字段的值
    $res = Book::value('press');

    #column():所有多條記錄某個字段的值
    $res = Book::column('press', 'press');
    dump($res);
}

 

模型添加數據

public function insertBook($bookId)
{
    #方式1:Book::create插入單條數據
    $book = Book::create([
        'id'            => $bookId,
        'name'          => '書籍21',
        'type_id'       => 1,
        'author'        => "作者{$bookId}",
        'press'         => '清華大學出版社'
    ]);

    #方式2:save()插入單條數據
    $book = new Book();
    $book->id = 1000 + (integer)($bookId);
    $book->name = "書籍{$bookId}";
    $book->type_id = 1;
    $book->author = "作者{$bookId}";
    $book->press = '清華大學出版社';
    $book->save();

    $book1 = new Book();    #插入快捷方式
    $book1->save([
        'id'            => 1000 + (integer)($bookId),
        'name'          => "書籍{$bookId}",
        'type_id'       => 1,
        'author'        => "作者{$bookId}",
        'press'         => '清華大學出版社'
    ]);

    #方式3:saveAll()插入批量數據
    $res = $book1 ->saveAll([
        [
            'name'          => "書籍{$bookId}",
        ],
        [
            'name'          => "書籍{$bookId}",
        ]
    ]);

    dump($res);
}

 

模型更新數據

public function updateBook()
{
    //更新數據
    $res = Book::update([
        'author' => '作者11'
    ], function ($query){
        $query->where('id', '=', '1001');
    });


    #更新數據
    $res = Book::where('id', '=', '1002')
        ->update([
            'author' => '作者22'
        ]);

    #通過save()來更新已經有的model
    $book = Book::get(1001);
    $book ->author = '作者1';
    $book ->save();

    dump($book->toArray());
}

 

模型刪除數據

public function deleteBook()
{
    #Book::destroy()

    #如果當前表存在主鍵,直接傳值
    #$res = Book::destroy(1001);

    #如果當前表不存在主鍵,則可以根據$query函數進行條件刪除
    #$res = Book::destroy(function ($query){
    #    $query->where('id', '=', '1002');
    #});

    #通過實例進行刪除
    #$book = Book::get(1003);
    #$res = $book ->delete();

    #通過where條件進行刪除
    $res = Book::where('id', '>', 1000)
            ->delete();

    dump($res);
    
}

 

模型聚合操作

class Book extends Model
{
    #屬性和數據庫表字段映射
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';

    #獲取器:讀取數據庫中值的時候,在值的基礎上進行修改
    public function getSexAttr($var)
    {
        switch ($var) {
            case 0:
                return '男';
                break;
            case 1:
                return '女';
                break;
            default:
                return '未知';
                break;
        }
    }

    #修改器:對寫入數據庫中值進行修改
    public function setPasswordAttr($var)
    {
        return md5($var);
    }


    #自動完成功能
    protected $auto = [     #數據插入或更新的時候,對字段進行更新

    ];

    protected $insert = [   #插入時候,對字段進行更新
        'create_time'
    ];

    protected $update = [   #更新時候,對字段進行更新
        'modify_time'
    ];

    #綁定數據庫中create_time字段
    public function setCreateTimeAttr($var)
    {
        return time();
    }

    #綁定數據庫中modify_time字段
    public function setModifyTimeAttr($var)
    {
        return time();
    }
}

 


免責聲明!

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



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