文章出處

1、alias 用于設置數據表別名

$user = M('User');
var_dump($user->alias('anothername')->select());

這時在SQL中的查詢語句為

需要注意的是如果將anothername 中的another 和name中加空格,這樣是有問題的。就無法連接數據庫了。

 

2、group 方法通常用于對結合函數統計的結果集分組。

$user = M('User');
var_dump($user->field('user,max(id)')->group('id')->select());

這時是按group里的id來分組,相同的id的則會在一起,如果是group('email'),則會根據email相同的分在一組,這時可能不是email所有的都會相同

但是按email第一個匹配的分在一塊。這里的 field('user,max(id)') 是只取數據庫里的user和id,其他的不顯示

SQL語句為 SELECT `user`,max(id) FROM `think_user` GROUP BY id  

 

3、having 方法一般用于配合 group 方法完成從分組的結果中再篩選數據。

$user = M('User');
var_dump($user->field('user,max(id)')->group('id')->having('id>2')->select());

從group分好組后,就開始篩選組里大于2的顯示出來

SQL語句為 SELECT `user`,max(id) FROM `think_user` GROUP BY id HAVING id>2  

 

4、distinct方法用于返回唯一不同的值

$user = M('User');
var_dump($user->distinct( true)->field('user')->select());

這時如果是相同的值就不會再顯示出來

 

5、cache 用于查詢緩存操作

$user = M('User');
var_dump($user->cache(true)->select());

PS:第一次查詢數據庫,第二次查詢相同的內容直接調用緩存,不用再查詢數據庫。

 

 

三、命名范圍

 

命名范圍其實就是將 SQL 語句封裝在模型定義類里,而不在控制器里。這樣的分層操
作有利于代碼的可讀性,避免開發人員在寫 CURD 操作時出現問題。架構人員只要在命名范
圍內合理的規劃即可,類似于架構師架構了接口,讓開發人員面向接口開發一樣。

 

要使用命名范圍,第一步要定義屬性:

在 Home/Model/UserModel.class.php 里插入以下代碼:

<?php
namespace Home\Model;
use Think\Model;

class UserModel extends Model {
    protected $_scope = array(     //$_scope是固定的,不可更改
    'sql1' => array(
         'where'=>array('id'=>1),
        ),
    'sql2' =>array(
        'order'=>array('date'=>'DESC'),
        'limit'=> 2,
        ),
    'default'=>array(
        'where'=>array('id'=>2)
        ),
    );
    
}

然后在 Home/controller/UserController.class.php 中調用,需要注意的是,調用的時候scope也是不能改變的。

1.

$user = D('User');
var_dump($user->scope('sql1')->select());

這時得到的SQL查詢語句為: SELECT * FROM `think_user` WHERE ( `id` = 1 ) 

2.

var_dump($user->scope('sql2')->select());

得到的SQL查詢語句為: SELECT * FROM `think_user` ORDER BY `date` DESC LIMIT 2 

3、

var_dump($user->scope('sql2')->scope('sql1')->select());

得到的SQL語句為: 

SELECT * FROM `think_user` WHERE ( `id` = 1 ) ORDER BY `date` DESC LIMIT 2

4.

var_dump($user->scope()->select());

得到的SQL語句為: SELECT * FROM `think_user` WHERE ( `id` = 2 ) 

這時調用的default數組,也就是在調用scope()里面不需要填入參數

5.

var_dump($user->scope('sql2',array('limit'=>4))->select());

在調用時改變原來sql2的數組的條件,也可以改變全部的

6.

var_dump($user->scope(array('where'=>array('id'=>1),'order'=>'date desc','limit'=>4))->select());

這時是直接寫入參數,不調用類里面的參數

7.

var_dump($user->sql1()->select());

這里是把寫在類里的數組直接當作方法來調用,效果和調用sql1是一樣的。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()