Laravel框架数据库CURD操作、连贯操作使用方法
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
一、Selects
检索表中的所有行
$users = DB::table('users')->get();
foreach ($users as $user)
{
var_dump($user->name);
}
从表检索单个行
$user = DB::table('users')->where('name', 'John')->first();
var_dump($user->name);
检索单个列的行
$name = DB::table('users')->where('name', 'John')->pluck('name');
检索一个列值列表
$roles = DB::table('roles')->lists('title');
该方法将返回一个数组标题的作用。你也可以指定一个自定义的键列返回的数组
$roles = DB::table('roles')->lists('title', 'name');
指定一个Select子句
$users = DB::table('users')->select('name', 'email')->get();
$users = DB::table('users')->distinct()->get();
$users = DB::table('users')->select('name as user_name')->get();
Select子句添加到一个现有的查询
$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();
where
$users = DB::table('users')->where('votes', '>', 100)->get();
OR
$users = DB::table('users')->where('votes', '>', 100)->orWhere('name', 'John')->get();
Where Between
$users = DB::table('users')->whereBetween('votes', array(1, 100))->get();
Where Not Between
$users = DB::table('users')->whereNotBetween('votes', array(1, 100))->get();
Where In With An Array
By admin
read morePHP中的max_input_vars指令
今天接到客服部工作人员反馈的一个问题,客户使用产品系统是允许用户添加产品属性的,而每个属性是由多个表单域组成 ,这样当每添加一个属性就等于添加了n个表单域,这个客户添加的非常的多,发现在提交保存的时候总是失败,提示其中一个表单元素的索引值不存在,经测试是发现服务端接收的一些表单域丢失了一部分。起初分析的是服务器接收的数据超出了php设置的max_post_size(其实当时已经设置了8M,足够使用了),修改了测试发现此问题仍然存在。后来将用户原来的一些添加的表单元素进行删除,再重新添加同样数据库表单域可以成功,但一旦超出一定数量的表单域就会发生丢失的情况,这个时候首先怀疑的是apache是否有类似限制接收隐藏域的指令,找了没有找到,紧接着在php中批到一个max_input_vars这个指令,意思就是说php中允许接收的最大表单域数据,到目前为止基本上是确定这个原因引起的了,奖其修改为2000,重启Apache,发现一切正常。
总结:提起php中的max_input_vars 估计很少人知道这个这个指令,因为他的使用场景实在是太少了,在php.ini中这个指令的定义是指服务端最大可以接收的表单域的数量多少,默认是1000,这足够我们平时使用了。但仍然有一些特殊的情况下需要修改此值的大小。
By admin
read more使用supervisord监控php脚本
官网: http://www.supervisord.org
一、安装supervisord
$brew install supervisord
在mac下安装要比linux下安装方便的多。
二、配置
修改/usr/local/etc/supervisord.ini文件,取消以下几行注释
[inet_http_server] ; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
这样就可以通过浏览器对进行管理了。
三、添加一个新应用
创建一个a.php文件,内容如下:
while(true){
echo 'a' . time() . "\r\n";
sleep(1);
}
然后在supervisord.ini文件中添加以下几行:
[program:php]
command=php /Users/sxf/web/a.php
autostart=true
autorestart=true
startsecs=1
startretries=3
redirect_stderr=true
stdout_logfile=/Users/sxf/web/supervisord.log
stderr_logfile=/Users/sxf/web/stderr.log
重启supervisord。
$brew services restart supervisord
打开浏览器 http://127.0.0.9001,输入用户名和密码,可以看此进程,可以对每个进程进行停止,重启和刷新操作。
[
][1]
对于supervisord命令请参考: [http://blog.haohtml.com/archives/15145
By admin
read more在linux下,解决修改文件权限引起的git出现的文件变化问题
有时候,我们将服务器上的web文件夹的权限进行了修改,但git默认是也会记录权限状态的,这个时间用git status会发现所有的文件都处于被修改的状,这显示不是我们想要的。这时我们只要让git把文件权限忽略掉就可以了。
在操作前首先我们确认一下当前配置项core.filemode,默认为true,(也可以使用cat .git/config查看)
$ git config --list
然后执行
$ git config core.filemode false
这样就设置了忽略文件权限。查看下配置:
$ cat .git/config
[
]
git忽略文件权限的配置
By admin
read more按位与、或、异或等运算方法
常见位运算
异或^:相同为0,不同为1。如:0^0=0; 0^1=1; 1^0=1; 1^1=0 按位与&: 都为1则为1,否则为0。如:1&1=1; 1&0=0; 0&1=0; 0&0=0 按位或|:有1则为1,否则为0。如:1|1=1; 1|0=1; 0|1=1; 0|0=0 按位非(按位取反)~:取反操作。如:1->0; 0->1
——–
**按位与运算符(&)**参加运算的两个数据,按二进制位进行“与”运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两位同时为“1”,结果才为“1”,否则为0例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。另,负数按补码形式参加按位与运算。“与运算”的特殊用途:(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。(2)取一个数中指定位方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。例:设X=10101110, 取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到; 还可用来取X的2、4、6位。
**按位或运算符(|)**参加运算的两个对象,按二进制位进行“或”运算。运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1; 即 :参加运算的两个对象只要有一个为1,其值为1。例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。 另,负数按补码形式参加按位或运算。“或运算”特殊作用:(1)常用来对一个数据的某些位置1。方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。
**异或运算符(^)**参加运算的两个数据,按二进制位进行“异或”运算。运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。 “异或运算”的特殊作用:(1)使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。(2)与0相异或,保留原值 ,X ^ 0000 0000 = 1010 1110。从上面的例题可以清楚的看到这一点。
**取反运算符(~)**参加运算的一个数据,按二进制位进行“取反”运算。运算规则:~1=0; ~0=1;即:对一个二进制数按位取反,即将0变1,1变0。 使一个数的最低位为零,可以表示为:a&~1。1的值为1111111111111110,再按“与”运算,最低位一定为0。因为“”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。
**左移运算符(«)**将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。例:a = a « 2 将a的二进制位左移2位,右补0,左移1位后a = a * 2; 若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
**右移运算符(»)**将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。操作数每右移一位,相当于该数除以2。例如:a = a » 2 将a的二进制位右移2位,左补0 or 补1 得看被移数是正还是负。
运算符把 expression1 的所有位向右移 expression2 指定的位数。expression1 的符号位被用来填充右移后左边空出来的位。向右移出的位被丢弃。
By admin
read more解决git clone时报错:The requested URL returned error: 401 Unauthorized while accessing的问题
版本问题,最直接的解决办法就是重新编辑安装git吧:
- 下载:
wget -O git.zip https://github.com/git/git/archive/master.zip
- 解压:
unzip git.zip
- 进入git目录:
cd git-master
- 编译安装:
autoconf
./configure --prefix=/usr/local
make && make install
- 最后别忘了删掉旧的git,并把新版本的git建立软链接到/usr/bin/git
rm /usr/bin/git
ln -s /usr/local/bin/git /usr/bin/git
By admin
read moregit提示“Pull is not possible because you have unmerged files.”的解决办法(转)
在git pull的过程中,如果有冲突,那么除了冲突的文件之外,其它的文件都会做为staged区的文件保存起来。
重现:
$ git pull
A Applications/Commerce/BookingAnalysis.java A Applications/Commerce/ClickSummaryFormatter.java M Applications/CommerceForecasting/forecast/Forecast.java A Applications/CommerceForecasting/forecast/ForecastCurveProviderCategory.java M Applications/CommerceForecasting/forecast/ForecastProvider.java M Applications/CommerceForecasting/forecast/InputPropertyItem.java ……
A Applications/LocalezeImporter/com/tripadvisor/feeds/SingleMenuLocalezeMatcher.java A Applications/LocalezeImporter/com/tripadvisor/feeds/TypeCategory.java
Pull is not possible because you have unmerged files.Please, fix them up in the work tree, and then use ‘git add/rm ’as appropriate to mark resolution, or use ‘git commit -a’.
通过git status你会发现下面古怪的事情:
zhonghua@pts/ttys000 $ git status # On branch sns # Your branch and ‘snsconnect/sns’ have diverged, # and have 1 and 52 different commit(s) each, respectively.
By admin
read more一张图让你彻底理解聚簇索引与普通索引的区别[经典]
[
][1]
下面分析下索引和锁的关系。 1)delete from msg where id=2;
由于id是主键,因此直接锁住整行记录即可。
图5
2)delete from msg where token=’ cvs’;
由于token是二级索引,因此首先锁住二级索引(两行),接着会锁住相应主键所对应的记录;
图6
3)delete from msg where message=订单号是多少’;
message没有索引,所以走的是全表扫描过滤。这时表上的各个记录都将添加上X锁。
图7
By admin
read moremysql配置变量介绍
key_buffer_size
设置这个变量给键缓冲区(或者说键缓存)分配指定大小的空间。但是操作系统只有在实际用到这些空间的时候才会进行分配。例如,将键缓冲区大小设置为1GB,并不意味着服务器就会真正地给它分配1GB空间。
对一个已有的缓存设置非零值将会冲洗缓存,从技术上来说,这是一个在线操作,但是它会阻止所有访问该缓存的动作,直到缓存冲洗完成。
table_cache_size
设置这个变量是不会立即生效,要等到下一个线程打开表的时候才会生效。当它生效的时候,MYSQL会检查变量的值。如果值大于缓存中表的数量,线程就可以把新打开的表插入到缓存中。如果值小于缓存中表的数量,MySQL就会从缓存中删除掉没有使用的表。
thread_cache_size
设置这个变量不会立即生效,生效被延时到了下一次线程关闭的时候。在那时,MySQL检查缓存中是否有空间存储线程。如果是,它会把线程缓存起来,供另外一个连接使用。如果不是,它会直接结束掉线程。在这种情况下,缓存中线程的数量,以及线程缓存使用的内存数量不会立即就下降。只有当新连接为了使用线程把它从缓存中移走的时候才会看到下降。(MySQL只有在连接关闭的时候才会把线程加入缓存,也只有在创建新连接的时候 才从缓存中移除线程。)
query_cache_size
在服务器启用的时候,MySQL会为查询缓存一次性分配变量所定义数量的内存。如果更新了变量(即使把值设置为当前值),MySQL会立即删除掉所有缓存的查询,重新把缓存设置为定义的大小,并且重新初始化缓存的内存。
read_buffer_size
MySQL只有在需要的时候才会为该缓冲区分配内存,但是它会一次性地把指定的大小分配给该缓存。
read_rnd_buffer_size
MySQL只会在查询的时候才给这个缓冲区分配内存,并且只会分配所需要的内存。
sort_buffer_size
MySQL只有在查询需要排序的时候才会为这个缓冲区分配内存。但是只要发生了排序,MySQL会立即分配变量定义的所有内存,不管是否需要这么大的空间。
摘自《高性能MySQL》第6章 优化服务器配置 p206
By admin
read more如何用十条命令在一分钟内检查Linux服务器性能
如果你的Linux服务器突然负载暴增,报警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断。概述
通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
gtop
pstree 查看进程树之间派生的关系
trap 捕捉进行接收到的信号标识,如 SIGKILL/SIGTERM
其中一些命令需要安装sysstat包,有一些由procps包提供。这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,也就是所谓的USE方法。
下面我们来逐一介绍下这些命令,有关这些命令更多的参数和说明,请参照命令的手册。
uptime
$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量。这些数据可以让我们对系统资源使用有一个宏观的了解。
命令的输出分别表示1分钟、5分钟、15分钟的平均负载情况。通过这三个数据,可以了解服务器负载是在趋于紧张还是趋于缓解。如果1分钟平均负载很高,而15分钟平均负载很低,说明服务器正在命令高负载情况,需要进一步排查CPU资源都消耗在了哪里。反之,如果15分钟平均负载很高,1分钟平均负载较低,则有可能是CPU资源紧张时刻已经过去。
上面例子中的输出,可以看见最近1分钟的平均负载非常高,且远高于最近15分钟负载,因此我们需要继续排查当前系统中有什么进程消耗了大量的资源。可以通过下文将会介绍的vmstat、mpstat等命令进一步排查。
dmesg丨tail
$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[…]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
By admin
read moreVisual Studio Code之常备快捷键
推荐:Visual Studio Code 添加设置代码段(snippet){#cb_post_title_url.postTitle2}
官方快捷键大全: https://code.visualstudio.com/docs/customization/keybindings
Visual Studio Code是个牛逼的编辑器,启动非常快,完全可以用来代替其他文本文件编辑工具。又可以用来做开发,支持各种语言,相比其他IDE,轻量级完全可配置还集成Git感觉非常的适合前端开发。 所以我仔细研究了一下文档未来可能会作为主力工具使用。
主命令框
最重要的功能就是F1或Ctrl+Shift+P打开的命令面板了,在这个命令框里可以执行VSCode的任何一条命令,甚至关闭这个编辑器。
按一下Backspace会进入到Ctrl+P模式里
在Ctrl+P下输入>又可以回到Ctrl+Shift+P模式。
在Ctrl+P窗口下还可以
- 直接输入文件名,跳转到文件
?列出当前可执行的动作!显示Errors或Warnings,也可以`Ctrl+Shift+M:跳转到行数,也可以Ctrl+G直接进入@跳转到symbol(搜索变量或者函数),也可以Ctrl+Shift+O直接进入@:根据分类跳转symbol,查找属性或函数,也可以Ctrl+Shift+O后输入:进入#根据名字查找symbol,也可以Ctrl+T
常用快捷键
编辑器与窗口管理
同时打开多个窗口(查看多个项目)
- 打开一个新窗口:
Ctrl+Shift+N - 关闭窗口:
Ctrl+Shift+W
同时打开多个编辑器(查看多个文件)
- 新建文件
Ctrl+N - 文件之间切换
Ctrl+Tab - 切出一个新的编辑器(最多3个)
Ctrl+\,也可以按住Ctrl鼠标点击Explorer里的文件名 - 左中右3个编辑器的快捷键
Ctrl+1Ctrl+2Ctrl+3 - 3个编辑器之间循环切换 Ctrl+`
- 编辑器换位置,
Ctrl+k然后按Left或Right
代码编辑
格式调整
- 代码行缩进
Ctrl+[Ctrl+] Ctrl+CCtrl+V如果不选中,默认复制或剪切一整行- 代码格式化:
Shift+Alt+F,或Ctrl+Shift+P后输入format code - 上下移动一行:
Alt+Up或Alt+Down - 向上向下复制一行:
Shift+Alt+Up或Shift+Alt+Down - 在当前行下边插入一行
Ctrl+Enter - 在当前行上方插入一行
Ctrl+Shift+Enter
光标相关
- 移动到行首:
Home - 移动到行尾:
End - 移动到文件结尾:
Ctrl+End - 移动到文件开头:
Ctrl+Home - 移动到定义处:
F12 - 定义处缩略图:只看一眼而不跳转过去
Alt+F12 - 移动到后半个括号
Ctrl+Shift+] - 选择从光标到行尾
Shift+End - 选择从行首到光标处
Shift+Home - 删除光标右侧的所有字
Ctrl+Delete - Shrink/expand selection:
Shift+Alt+Left和Shift+Alt+Right - Multi-Cursor:可以连续选择多处,然后一起修改,
Alt+Click添加cursor或者Ctrl+Alt+Down或Ctrl+Alt+Up - 同时选中所有匹配的
Ctrl+Shift+L Ctrl+D下一个匹配的也被选中(被我自定义成删除当前行了,见下边Ctrl+Shift+K)- 回退上一个光标操作
Ctrl+U
重构代码
- 找到所有的引用:
Shift+F12 - 同时修改本文件中所有匹配的:
Ctrl+F12 - 重命名:比如要修改一个方法名,可以选中后按
F2,输入新的名字,回车,会发现所有的文件都修改过了。 - 跳转到下一个Error或Warning:当有多个错误时可以按
F8逐个跳转 - 查看diff 在explorer里选择文件右键
Set file to compare,然后需要对比的文件上右键选择Compare with 'file_name_you_chose'.
查找替换
- 查找
Ctrl+F - 查找替换
Ctrl+H - 整个文件夹中查找
Ctrl+Shift+F匹配符: *to match one or more characters in a path segment?to match on one character in a path segment**to match any number of path segments ,including none{}to group conditions (e.g.{**/*.html,**/*.txt}matches all html and txt files)[]to declare a range of characters to match (e.g.,example.[0-9]to match onexample.0,example.1, …
显示相关
- 全屏:
F11 - zoomIn/zoomOut:
Ctrl + =/Ctrl + - - 侧边栏显/隐:
Ctrl+B - 侧边栏4大功能显示:
- Show Explorer
Ctrl+Shift+E - Show Search
Ctrl+Shift+F - Show Git
Ctrl+Shift+G - Show Debug
Ctrl+Shift+D - Show Output
Ctrl+Shift+U
其他
- 自动保存:File -> AutoSave ,或者
Ctrl+Shift+P,输入 auto
修改默认快捷键
File -> Preferences -> Keyboard Shortcuts
By admin
read more让终端走代理的几种方法
方法1
在终端中直接运行命令
export http_proxy=http://proxyAddress:port
这个办法的好处是简单直接,并且影响面很小(只对当前终端有效)。
方法2
把代理服务器地址写入shell配置文件.bashrc或者.zshrc
直接在.bashrc或者.zshrc添加下面内容
export http_proxy="http://localhost:port"
export https_proxy="http://localhost:port"
以使用shadowsocks代理为例,ss的代理端口为1080,那么应该设置为
export http_proxy="http://127.0.0.1:1080"
export https_proxy="http://127.0.0.1:1080"
localhost就是一个域名,域名默认指向 127.0.0.1,两者是一样的。
然后ESC后:wq保存文件,接着在终端中执行
source ~/.bashrc
或者退出当前终端再起一个终端。 这个办法的好处是把代理服务器永久保存了,下次就可以直接用了。
方法3
改相应工具的配置,比如apt的配置
sudo vim /etc/apt/apt.conf
在文件末尾加入下面这行
Acquire::http::Proxy "http://proxyAddress:port"
保存apt.conf文件即可。
关于apt的代理设置可以参考 这里
关于git的代理设置看这里: 用shadowsocks加速git clone
方法4
补充
如果代理服务器需要登陆,这时可以直接把用户名和密码写进去
http_proxy=http://userName:password@proxyAddress:port
如果想恢复默认的配置,可以执行
unset http_proxy HTTP_PROXY https_proxy HTTPS_PROXY
By admin
read morehighcharts中对”另存为”进行汉化
$(function () {
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container'
},
lang{
printChart:"打印图表",
downloadJPEG: "下载JPEG 图片"
downloadPDF: "下载PDF文档"
downloadPNG: "下载PNG 图片"
downloadSVG: "下载SVG 矢量图"
exportButtonTitle: "导出图片"
},
.....
})
})
By admin
read more