[关闭]
@xxliixin1993 2016-07-13T14:06:32.000000Z 字数 9670 阅读 1437

文档

未分类


composer

http://docs.phpcomposer.com/
解决依赖关系的一种包管理器,把项目依赖的包require进去,而且对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件。你可以简单的引入这个文件,你会得到一个免费的自动加载支持。

phalcon

Controller

如果有参数访例如 http://web.lx.ybserver.com/topic/detail?id=161 这种

$topic_id = $this->request->getQuery("id", "int");id参数要这样接收 或者用$id = $this->request->get('id')

Model

Mongodb查询

  1. $this->setMongo('yuba_base', 'yuba_base');
  2. $ret = $this->where(['qid' => (string) $qid, 'aid' => (int) $aid])->set($answer)->update('post_answers');
  3. $model->insert('table_name', $insert_data, $options);
  4. option一般不用传
  5. setMongo('数据库名','yuba_base');
  6. delete|insert|get|update(表名);方法在app/core/mongodb.php
  7. <div class="md-section-divider"></div>

Mysql查询

  1. // Executing with bound parameters
  2. $cars = $this->modelsManager->executeQuery("SELECT * FROM Cars WHERE name = :name:", array(
  3. 'name' => 'Audi'
  4. ));
  5. foreach ($cars as $car) {
  6. echo "Name: ", $car->name, "\n";
  7. }
  8. <div class="md-section-divider"></div>
  1. \Phalcon\Tag::prependTitle('定时任务');
  2. $builder = $this->modelsManager->createBuilder()
  3. ->from('Douyu\Yuba\Model\Cron');//from模型名
  4. $paginator = new \Phalcon\Paginator\Adapter\QueryBuilder([
  5. 'builder' => $builder,
  6. 'limit' => 15,
  7. 'page' => $this->request->get('page', 'int', 1, true),
  8. ]);
  9. $page = $paginator->getPaginate();
  10. $this->view->setVar('page', $page);

Redis

  1. $redis = new \Douyu\Core\RedisBase('redis');
  2. if ($redis->hExists($hash_key, $qid)) {
  3. //key存在,自增1
  4. $redis->hIncrBy($hash_key, $qid, 1);
  5. } else {
  6. $redis->hSet($hash_key, $qid, $num);
  7. }

lumen

http://laravel-china.org/docs/5.1/queries

1 修改.env.example为.env

2 查看最后一条sql

  1. 先开启日志
  2. \Illuminate\Support\Facades\DB::connection()->enableQueryLog();
  3. $model = HomeHotAnswer::where('deleted_at', '=', '0000-00-00 00:00:00');
  4. if ($request->has('content')) {
  5. $content = trim($request->input('content'));
  6. $model->where('content', 'like', "%{$content}%");
  7. }
  8. $res = $model->orderBy('created_at', 'desc')->paginate(self::HITS)->toArray();
  9. 再显示全部sql end()可以取出最后一条
  10. print_r(\Illuminate\Support\Facades\DB::getQueryLog());
  11. 或者用end()
  12. $sqls = \Illuminate\Support\Facades\DB::getQueryLog();
  13. print_r(end($sqls));

3 Eloquent 会预计你的数据表中有 created_at 和 updated_at 字段。如果你不希望让 Eloquent 来自动维护这两个字段,可在模型内将 $timestamps 属性设置为 false

4 数据库事务

要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法。如果在事务的闭包内抛出异常,事务将会被自动还原。如果闭包运行成功,事务将被自动提交。你不需要担心在使用 transaction 方法时还需要亲自去手动还原或提交事务

  1. DB::transaction(function () {
  2. DB::table('users')->update(['votes' => 1]);
  3. DB::table('posts')->delete();
  4. });

手动操作事务
如果你想手动处理事务并对还原或提交操作进行完全控制,则可以在 DB facade 使用 beginTransaction 方法:

  1. DB::beginTransaction();

你也可以通过 rollBack 方法来还原事务:

  1. DB::rollBack();

最后,可以通过 commit 方法来提交这个事务:

  1. DB::commit();

5 Validator验证类

例如

  1. $validator = Validator::make($inputs, [
  2. 'qid' => 'required|numeric',
  3. 'aid' => 'required|numeric',
  4. 'content' => 'required|string|max:50'
  5. ]);
  6. if ($validator->fails()) {
  7. return self::Failed(1, $validator->errors()->first());
  8. }

规则:http://laravel-china.org/docs/5.1/validation

required
验证字段必须存在输入数据,且不为空。字段符合下方任一条件时即为「空」:
该值为 null。
该值为空字符串。
该值为空数组或空的可数对象。
该值为没有路径的上传文件。

string
验证字段值的类型是否为字符串。

numeric
验证字段值是否为数值。

max:value 例max:50
字段值必须小于或等于 value 。字符串、数值或是文件大小的计算方式和 size 规则相同。

分页

paginate(每页显示条数)

  1. $res = $model->paginate(20)->toArray();

增删改记录日志

  1. MyLog.php
  2. $logItem = [
  3. 'by_user' => '0',
  4. 'by_user_id' => 0,
  5. 'operation' => '后台管理->配置管理:删除',
  6. 'ip' => $ip,
  7. 'comments' => '配置ID:'.$findObj->id.'; 变量名称为:'.$findObj->name.'; 变量值为:'.$findObj->value,
  8. 'create_time' => NOW_TIME,
  9. ];

git

fork之后先添加远程地址
例如 git clone http://git.ybserver.com/lixin/yuba_admin.git

git remote add upstream http://git.ybserver.com/zhangliping/yuba_admin.git
切换到远程分支中
git checkout -b develop origin/develop
一段时间后需要更新fork的develop分支上的代码

git fetch upstream develop 这是拉远程到本地
git merge upstream/develop 合并当前分支(要是想合并本地的develop要先切换到该分支)
git push origin develop将本地的develop分支推送到origin主机的develop分支。如果后者不存在,则会被新建。git push 推送当前所有分支到origin上
然后再网页上发pull request

mongodb

添加数据

db.集合名.insert({键值对})
每添加一个文档,会自动创建一个_id的键,_id的键我们也可以自己指定的,但是不能重复。
注: _id 字段是系统自动生成的,也可以自己指定任何类型的字,但值不能重复。
save操作:
save操作和insert操作区别在于当遇到_id相同的情况下
save完成更新操作。
insert则会报错。

db.class.insert(name:'xiaohei',age:18)

删除数据

db.集合名.remove({条件})
例1:删除 class 集合中年龄等于18的文档

db.class.remove({age:18})

修改数据

语法: update({条件},{数据}, {是否新增[u或省略]}, {是否修改多条[ture,false]})
例子1:修改年龄等于5的用户的名称为tom

  1. db.class.update({age:18},{name:'tom'})如此修改,则会丢失键值
  2. 使用修改器进行修改:
  3. $inc : 加一个数字
  4. $set : 修改某一个字段,如果该字段不存在就增这个字段
  5. db.class.update({age:18},{"$set":{name:'tom'}})

查询数据

find( 查询条件 , 返回的键), 如
 
查询时只返回某几个字段
db.user.find({}, {"age":1}) --> 列出所有人的 age 字段
db.user.find({} , {"age": 0} ) --> 除了age字段,其他字段都列出来
例子:查询年龄小于6的用户
db.user.find( {"age" : { "$lt" : 6 } } )

db.集合名.count():返回集合中有多少个文档。
db.集合名.find().sort({age:1})根据年龄升序
db.集合名.find().sort({age:-1})根据年龄降序
例子:比如只想显示前3个文档。
db.集合名.find().limit(3)
例子:比如显示从3个到第5个文档。
db.集合名.find().skip(2).limit(3)

redis

String类型

set

语法:set 键名称 值

set name lx

get

语法:get 键名
get name

setnx

设置键时,先判断一下该键是否存在,如果key已经存在,返回0。如果不存在再创建。
语法:setnx 键名称 值

setnx name lx

setex

设置key对应的值为string类型的value,并指定此键值对应的有效期
语法:setex 名称 有效期 值
setnx name 10 lx

mset

一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置。
语法: mset 键名1 值1 键名2 值2

mset name lx age 18相当于set name lx set age 18

msetnx

一次设置多个key的值,成功返回ok表示所有的值都设置了,失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key,只设置不存在的key
语法: msetnx 键名1 值1 键名2 值2
msetnx name lx age 18

getrange

获取key的value值的范围内的子字符串
语法: getrange 键名 起始范围 终止范围

getrange name 0 5获取name的前5个字符

mget

一次获取多个key的值,如果对应key不存在则对应返回nil。
语法: mget 键名1 键名2
mget name age

incr

对key的值做加加操作,并返回新的值。
语法: incr 键名

incr age

incrby

同incr类似,加指定值,key不存在时候会设置key,并认为原来的value是0。
语法: incrby 键名 加多少
incrby age 20

decr decrby

对key的值做减减操作。 decrby 同decr类似,减指定值

strlen

取指定key的value值的长度。
语法: strlen 键名

strlen name

append

给指定key的字符串追加value,返回新字符串值的长度。
语法: append 键名 添加内容
append name andTomIsCat

Hash类型

Redis hash是一个string类型的field和value的映射表。它的添加、删除操作都是0(1)(平均)。hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象

hset

设置hash field为指定值,如果 key不存在,则先创建。
语法: hset 哈希名称 字段名称 值

hset User1 name lx

hget

取出hash field的值。
语法:hget 哈希名称 字段名称
hget User1 name

hsetnx

设置hash field为指定值,如果key不存在,则先创建,如果存在则返回0。
语法: hsetnx 哈希名称 字段名称 值

hsetnx User1 name lx

hmset

同时设置hash的多个field
语法:hmset 哈希名称 field1 key1 value1 field2 key2 value2
hmset User1 name lx Admin1 name zhang

hmget

获取全部指定的hash field。
语法:hmget 哈希名称 field1 field2

hmget User1 name age email

hincrby

指定的 hash field加上给定的值。
语法:hincrby 哈希名称 key1 添加步长
hincrby User1 age 10

hexists

测试指定的 field是否存在。存在返回1,不存在返回0
语法:hexists 哈希名称 key1

hexists User1 age

hlen

返回指定hash的field数量.
语法:hlen 哈希名称
hlen User1

hdel

删除指定hash的field
语法:hdel 哈希名 field

hdel User1 name

hkeys

返回hash的所有field
语法:hkeys 哈希名
hkeys User1

hvals

返回hash的所有 value。
语法:hvals 哈希名

hvals User1

hgetall

获取某个hash中全部的field及value
语法:hgetall 哈希名
hgetall User1

List类型

list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key 理解为链表的名字。redis的list类型其实就是一个每个子元素都是string 类型的双向链表。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list即可以作为栈,又可以作为队列

lpush

在key对应list的头部添加字符串元素。
语法:lpush 链表名称 值内容

lpush ListTest1 'han'

lrange

获取链表里面的值
语法:lrange 链表名称 起始 终止
lrange ListTest1 0 2
ps:lrange 链表名称 0 -1注意0 和 -1 表示取值范围,从头部到尾部。

rpush

在key对应list的尾部添加字符串元素。
语法:rpush 链表名称 值内容

rpush ListTest1 'zhang'

linsert

在key对应list的特定位置前或后添加字符串。
语法:linsert 链表名称 BEFORE 已存在作为位置的值 添加值
INSERT list1 BEFORE "bar" "Yes"

lset

设置list中指定下标的元素值。注:下标从0开始计算
语法:lset 链表名称 下标值 添加值

lset ListTest1 0 'lee'

lrem

根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。
语法:lrem 链表名称 COUNT VALUE
LREM mylist -2 "hello"从尾向头搜索两个hello删除

ltrim

保留指定key的值范围内的数据,就是对一个列表进行修剪。
语法:ltrim 链表名称 起始值 终止值

ltrim ListTest1 0 2只保留下标为0到下标为2的数据

lpop

从list的头部删除一个元素,并返回删除元素。
语法:lpop 链表名称
lpop ListTest1

rpop

从 list的尾部删除一个元素,并返回删除元素。
语法:rpop 链表名称

rpop ListTest1

rpoplpush

从第一个list的尾部移除元素并添加到第二个list的头部。
语法:rpoplpush 链表名称1 链表名称2
rpoplpush ListTest1 mylist

lindex

返回链表名称指定index位置的元素。
语法:lindex 链表名称 下标

lindex ListTest1 0

llen

返回对应list的长度。
语法:llen 链表名称
llen ListTest

Set类型

set是集合,它是string类型的无序集合。set是通过hashTable实现的、添加、删除和查找的复杂度都是0(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。

sadd

向集合中添加元素。
语法:sadd 集合名 元素

sadd SetTest1 lx

smembers

获取集合中内容
语法:smembers 集合名称
smembers SetTest1

srem

删除名称为key的set中的元素.
语法:srem 集合名称 key

srem SetTest1 lx

spop

随机返回并删除set中一个元素。
语法:spop 集合名称
spop SetTest1

sdiff

返回给定集合之间的差集。不存在的集合 key 将视为空集。
语法:sdiff 集合名称1 集合2

sdiff myset1 myset2

sdiffstore

返回指定集合的差集并存在新的集合种
语法:sdiffstore 新的集合 集合1 集合2
sdiffstore NewSet myset1 myset2

sinter

返回所有给定集合的交集.
语法:sinter 集合1 集合2

sinter myset1 myset2

sinterstore

返回指定集合的交集并存在新的集合种
语法:sinterstore 新的集合 集合1 集合2
sinterstore NewSet myset1 myset2

sunion

返回所有给定集合的并集
语法:sunion 集合1 集合2

sunion myset1 myset2

sunionstore

返回指定集合的并集并存在新的集合种
语法:sunionstore 新的集合 集合1 集合2
sunionstore NewSet myset1 myset2

smove

移除第一个集合的value并添加到第二个集合种
语法:smove 集合1 集合2 集合1中移除的值

smove SetTest1 myset1 lx

scard

返回集合种的元素个数。
语法:scard 集合名
scard SetTest

sismember

测试集合种是否是名称为key的的元素,存在返回1 不存在返回0
语法:sismember 集合名 key

sismember SetTest lx

srandmember

随机返回set的一个元素,但不删除元素
语法:srandmember 集合名
srandmember SetTest lx

ZSet类型

sorted set是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中的key理解为zset的名字。

zadd

向zset集合中添加元素。如果该元素存在,则更新其顺序。
语法:zadd 集合名 序号 内容

zadd ZSetTest 1 lx

zrange(从小到大排序)

获取有序集合中的内容
语法:zrange 集合名 起始值 终止值 withscore
zrange ZSetTest 0 -1 withscore

zrem

删除名称为key的zset中的元素。
语法:zrem 集合名 要删除的元素的key

zrem ZSetTest lx

zincrby

对有序集合中指定成员的分数加上增量 increment可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。
当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。当key不是有序集类型时,返回一个错误。分数值可以是整数值或双精度浮点数。
语法:zincrby 集合名 增长量 key
zincrby ZSetTest 10 lx

zrank(从小到大排序) zrevrank(从大到小排序)

返回key在zset中元素的排名,即下标。
语法:zrank|zrevrank 集合名 key

zrank|zrevrank ZSetTest lx

zrevrange (从大到小顺序)

获取有序集合中的内容
语法:zrevrange 集合名 起始值 终止值 withscore
zrevrange ZSetTest 0 -1 withscore

zrangebyscore

返回集合中score在给定区间的元素
语法:zrangebyscore 集合名 起始值 终止值 withscore

zrangebyscore ZSetTest 2 3 withscore

zcount

返回集合中score在给定区间的数量。
语法:zcount 集合名 起始值 终止值
zcount ZSetTest 2 3

zcard

返回集合中元素的个数
语法:zcard 集合名

zcard ZSetTest

zremrangebyrank

用于移除有序集中,指定排名(rank)区间内的所有成员。

  1. redis 127.0.0.1:6379> ZADD salary 2000 jack
  2. (integer) 1
  3. redis 127.0.0.1:6379> ZADD salary 5000 tom
  4. (integer) 1
  5. redis 127.0.0.1:6379> ZADD salary 3500 peter
  6. (integer) 1
  7. redis 127.0.0.1:6379> ZREMRANGEBYRANK salary 0 1 # 移除下标 0 至 1 区间内的成员
  8. (integer) 2
  9. redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 有序集只剩下一个成员
  10. 1) "tom"
  11. 2) "5000"
  12. <div class="md-section-divider"></div>

zremrangebyscore

移除有序集中,指定分数(score)区间内的所有成员。

  1. redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 显示有序集内所有成员及其 score 值
  2. 1) "tom"
  3. 2) "2000"
  4. 3) "peter"
  5. 4) "3500"
  6. 5) "jack"
  7. 6) "5000"
  8. redis 127.0.0.1:6379> ZREMRANGEBYSCORE salary 1500 3500 # 移除所有薪水在 1500 到 3500 内的员工
  9. (integer) 2
  10. redis> ZRANGE salary 0 -1 WITHSCORES # 剩下的有序集成员
  11. 1) "jack"
  12. 2) "5000"
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注