A
实例化控制器
// 实例化Home模块的User控制器
$User = new \Home\Controller\UserController();
// 实例化Admin模块的Blog控制器
$Blog = new \Admin\Controller\BlogController();
// 假设当前模块是Home模块
$User = A('User');
$Blog = A('Admin/Blog')
-----------分割线---------
默认情况下,A方法实例化的是默认控制器层(Controller),如果你要实例化其他的分层控制器的话,可以使用:
// 假设当前模块是Home模块
// 实例化Event控制器
$User = A('User','Event');
$Blog = A('Admin/Blog','Event');
上面的代码等效于:
// 实例化Home模块的User事件控制器
$User = new \Home\Event\UserEvent();
// 实例化Admin模块的Blog事件控制器
$Blog = new \Admin\Event\BlogEvent();
alias
alias用于设置当前数据表的别名,便于使用其他的连贯操作,例如join方法。
联表查询方式
一、table()
定义要操作的数据表名称,可以动态改变当前操作的数据表名称,需要写数据表的全名,包含前缀,可以使用别名,例如:
1、$Model->Table('think_user user')->where('status>1')->select();
2、$Model->table('think_blog blog,think_type type')->where('blog.typeid=type.id')->field('blog.id as id,blog.title,blog.content,type.typename as type')->order('blog.id desc')->limit(5)->select();
Table方法的参数支持字符串和数组,数组方式的用法:
$Model->Table(array('think_user'=>'user','think_group'=>'group'))->where('status>1')->select();
使用数组方式定义的优势是可以避免因为表名和关键字冲突而出错的情况。
二、联表查询(内联、左联、右联、全联)的语法
表1结构--- T1
userid | username | password |
------|------|------|------|------|
自增id | 用户名 | 密码
1 | jack | jackpwd
2 | owen | owenpwd
表2结构-- T2
userid | jifen | dengji |
------|------|------|------|------|
自增id | 积分 | 等级
1 | 20 | 3
3 | 30 | 4
1、内联
一般会写成这样
select * from T1 ,T2 where T1.userid = T2.userid
等同于下面,但是没有后者的效率会搞很多
select * from T1 inner join T3 on T1.userid=T3.userid
结果如下
T1.userid | username | password |T2.userid | jifen | dengji |
1 jack jackpwd 1 20 3
2、左联表
select * from T1 left outer join T2 on T1.userid=T2.userid
结果如下
T1.userid | username | password |T2.userid | jifen | dengji |
1 jack jackpwd 1 20 3
2 owen owenpwd NULL NULL NULL
3、右联表
select * from T1 right outer join T2 on T1.userid=T2.userid
结果如下
T1.userid | username | password |T2.userid | jifen | dengji |
1 jack jackpwd 1 20 3
NULL NULL NULL 3 30 4
4、全联表
select * from T1 full outer join T2 on T1.userid=T2.userid
结果如下
T1.userid | username | password |T2.userid | jifen | dengji |
1 jack jackpwd 1 20 3
2 owen owenpwd NULL NULL NULL
NULL NULL NULL 3 30 4
双引号和单引号的区别
1、 单引号内部的变量不会执行
2、 双引号中的变量会执行
模糊查询
#查询用户名以字符'l'开头的用户: l%
SELECT * FROM user WHERE username LIKE 'l%';
#查询用户名以字符'e'结尾的用户:%e
SELECT * FROM user WHERE username LIKE '%e';
#查询用户名包含字符'o'的用户:%o%
SELECT * FROM user WHERE username LIKE '%o%';
#查询包含三个字符的用户
SELECT * FROM user WHERE username LIKE '___';
#查询用户名第二个字符为o的用户:_o%
SELECT * FROM user WHERE username LIKE '_o%';
D方法和M方法的区别
D和M的区别主要在于:M方法不需要创建模型类文件,M方法不会读取模型类,所以默认情况下自动验证是无效的,但是可以通过动态赋值的方式实现而D方法必须有创建模型类。
Create()
在进行往数据库中,添加数据、修改数据先创建数据