laravel orm递增递减

//递增
$article = Article::find($article_id);
$article->increment('read_count');

//递减
$article = Article::find($article_id);
$article->decrement('read_count');

laravel orm递增递减

标签: laravel


php laravel 抢红包防止并发超卖

场景

乐观锁

//查询
select version from goods WHERE id= 100
//更新
update goods set num = num - 1, version = version + 1 WHERE id= 100 AND num > 0 AND version = 查到的version;

这种方式采用了版本号的方式,其实也就是 CAS 的原理。

假设此时 version = 100, num = 1; 100 个线程进入到了这里,同时他们 select 出来版本号都是 version = 100。

然后直接 update 的时候,只有其中一个先 update 了,同时更新了版本号。

那么其他 99 个在更新的时候,会发觉 version 并不等于上次 select 的 version,就说明 version 被其他线程修改过了。那么我就放弃这次 update

标签: php


git stash 用法总结和注意点

常用git stash命令:

1、git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。

2、git stash list :查看stash了哪些存储

3、git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}

4、git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p

5、git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}

6、git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}

7、git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储

8、git stash clear :删除所有缓存的stash

总结下:git add 只是把文件加到git 版本控制里,并不等于就被stash起来了,git add和git stash 没有必然的关系,但是执行git stash 能正确存储的前提是文件必须在git 版本控制中才行。

标签: git stash


php优惠百分之多少计算方式

//商品金额
$price = 100;
//优惠百分比
$dis = 10;

//原价增加10%
$price * (1 + ($dis / 100));

//原价优惠10%
$price * (1 - ($dis / 100));
$price * (1 + ($dis / 100));
$price * (1 + ($dis / 100));

标签: php


mysql5.7 datetime 默认值为‘0000-00-00 00:00:00'值无法创建问题解决

设置sql_model

有些服务器上的mysql表中有timestamp类型字段,但是不允许默认值为'0000-00-00 00:00:00',主要是要设置sql_model来支持。

数据库版本5.7.22

CREATE TABLE users (
    id INT NOT NULL AUTO_INCREMENT,
    name varchar(50) NOT NULL default '',
    indate DATETIME NOT NULL default '0000-00-00 00:00',
    PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;

解决方案:

使用root登陆数据库

1、查看sql_mode:

mysql> select @@sql_mode;

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

2、NO_ZERO_IN_DATE,NO_ZERO_DATE是无法默认为‘0000-00-00 00:00:00’的根源,去掉之后再次新建表就可以了

set @@global.sql_mode=(select replace(@@sql_mode,'NO_ZERO_IN_DATE,NO_ZERO_DATE',''));
//关闭数据库重新打开

注:

NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。

测试新建表,问题解决。

标签: mysql


composer查看镜像地址

composer查看全局设置:

composer config -gl

设置composer镜像为国内镜像:

composer config -g repo.packagist composer https://packagist.phpcomposer.com
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer

标签: composer


Homestead 切换PHP版本

查看所有 php 版本和当前版本

update-alternatives --display php

执行后,会列出当前 php 所有版本和编号,输入编号,切换到执行的版本

sudo update-alternatives --config php

输入 3 即可切换到 php7.3啦

标签: homestead


Git 命令 & dev 分支合并到 master

git命令

假如我们现在在dev分支上,刚开发完项目,执行了下列命令:

git  add .
git  commit -m '提交的备注信息'
git  push -u origin dev

想将dev分支合并到master分支,操作如下:

1、首先切换到master分支上

git  checkout master

2、如果是多人开发的话 需要把远程master上的代码pull下来

git pull origin master

3、然后我们把dev分支的代码合并到master上

git  merge dev

4、然后查看状态及执行提交命令

git status

On branch master
Your branch is ahead of 'origin/master' by 12 commits.
  (use "git push" to publish your local commits)
nothing to commit, working tree clean

//上面的意思就是你有12个commit,需要push到远程master上 最后执行下面提交命令

git push origin master

5其他命令

更新远程分支列表

git remote update origin --prune

查看所有分支

git branch -a

删除远程分支dev

git push origin --delete dev

删除本地分支 dev

git branch -d  dev

标签: git命令