SQL 连贯操作 [2]

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是一样的。

时间: 2024-10-09 05:36:37

SQL 连贯操作 [2]的相关文章

SQL 连贯操作 [1]

一. 连贯入门 查找到 id 为 1,2,3,4 中按照创建时间的倒序的前两位. 在 Home/controller/UserController.class.php 下插入 1.连贯操作入门 $user = M('User'); var_dump($user->where('id in (1,2,3,4)')->order('date DESC')->limit(2)->select()); 得到的SQL查询语句为 PS:这里的 where.order 和 limit 方法都是连

一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句

如题: 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句不是一条关联查询语句. 例如: $list = $db->relation(true)->where($where)->order('blogid desc')->limit($Page->firstRow.','.$Page->listRows)->select(); $sql = $db->getLastSql(); 输出的sql语句为: SELE

关于php如何连贯操作类方法(以数据库为例)

关于php如何连贯操作类方法(以数据库为例) 1.下面是我写好的关于mysqli操作数据库的一些常用方法,大神请掠过 1 <?php 2 3 class Db 4 { 5 static private $config = [ 6 'datahost' => '', // 主机名 7 'dataname' => '', // 数据库名 8 'username' => '', // 用户名 9 'password' => '', // 用户密码 10 'charset' =>

第 39 章 ThinkPHP--SQL 连贯操作

本节课,我们将学习 ThinkPHP 模型基础类提供的连贯操作,通过连贯操作可以有效的 提供数据存取的代码清晰度和开发效率,并且支持所有的 CURD 操作. 一.连贯入门 连贯操作使用起来非常简单,比如查找到 id 为 1,2,3,4 中按照创建时间的倒序的前两 位. //连贯操作入门 $user = M('User'); var_dump($user->where('id in (1,2,3,4)')->order('date DESC')->limit(2)->select()

php连贯操作实现

我们在使用一些框架(如ThinkPHP)编码的时候,常用到这样的代码. M('User')->where(array('id'=>1))->field('name')->select(); 这样不仅有利于编码,而且也能让人"心情愉悦"呢.好了,不多说了.让我们看看如何实现的吧? <?php //数据库操作基类[PS:主要功能连贯功能实现] class Db{ //此属性定义要实现连贯操作的方法名 public $sql = array( "fie

TP访问数据库 和 连贯操作

<?php namespace Admin\Controller; use Think\Controller; class MainController extends Controller { public function showList() { echo "hello"; } public function test() { //数据访问 //造模型对象 $nation = D("Nation"); //查询 //$a = $nation->se

ThinkPHP教程_PHP框架之ThinkPHP(八)【CRUD与连贯操作】

一.CRUD ThinkPHP提供了灵活和方便的数据库操作方法,其中最基本的就是CRUD四个操作,只有掌握了最基本的CRUD操作,才能更好的运用更多实用的数据库操作方法 CRUD操作通常与连贯操作配合 1.创建操作 使用add()方法或addAll()方法 ·add()方法 可以直接传入要插入的数据,而且会在插入之前会过滤掉数据表中不存在的字段以及非法的数据类型(例如对象.数组等非标量数据).若当前表有主键自动增长并且插入记录成功的话,则返回所插入记录主键值 如果在执行add()操作之前已经创建

【转】PHP实现连贯操作

[第一种方案 __call] 我们在使用一些框架(如ThinkPHP)编码的时候,常用到这样的代码. M('User')->where(array('id'=>1))->field('name')->select(); 这样不仅有利于编码,而且也能让人"心情愉悦"呢.好了,不多说了.让我们看看如何实现的吧? <?php //数据库操作基类[PS:主要功能连贯功能实现] class Db{ //此属性定义要实现连贯操作的方法名 public $sql = a

PHP类连贯操作的实现方法

PHP中的连贯操作看起来的确很酷,也非常的方便代码的阅读,当然了必须是在OOP中用才行,在过程化的程序中,就没有必要用这种方法了.有实现这个方法的有用_CALL来实现的,而我下面写的这个例子,则不是用_call的,大家可以扩展一下吧. 下面写的这个SQL语句组合类,主要是用于学习的,如果有同学想拿去用,请再完善一下. /* * SQL语句组合实例类,始发文章web开发笔记 * www.chhua.com * 学习用,非专业类 * */ class sql{ private $sql=array(