-
安装vue环境 angular环境
安装环境这个步骤,我相信已经吧很多人挡再门槛之外了,包括很早之前的我!
具体的步骤网上的教程已经说的很明白了,这里我就把需要注意的细节再给大家讲一下,提高新手的安装成功率!
1:安装nodejs
安装过程非常简单,与平时安装的一般软件无异。
官方网站:https://nodejs.org/en/
Node.js自带npm包管理工具,使用npm可使我们快速安装项目中所需要的组件。
打开Node.js命令行工具,输入
node --version
可查看Node.js当前的版本,如果没有出现版本号,很可能是Node.js没安装成功,或者电脑环境没配置好。
2:安装cnpm
另外,由于npm的官方镜像服务器是在国外,国内没有进行科学上网的同学安装依赖包时,有时候速度会非常慢。因此,可采用淘宝的npm镜像,在命令行工具输入:
npm install -g cnpm --registry=https://registry.npm.taobao.org
以后就可以使用cnpm来代替npm了。因此,如果已经安装了淘宝的npm镜像工具,vue-cli可以这样安装:
cnpm install -g vue-cli
这里很多人会出现cnpm不是内部命令,明明自己安装是成功了的!
是由于没有添加环境变量到系统中导致的!
右键电脑,属性,高级设置,环境变量,系统变量中的path里,最后加上这段话:
你的cnpm.cmd所在的路径再加上英文版的分号。//这行文字其实是博客的代码格式,看,还有注释
如果不好找,可以利用腾讯桌面管家中的全局搜索工具,或者everything工具搜索cnpm.cmd,找到文件路径[又没有给我广告费]
vue-cli 用的是 npm 源,只要设置 npm 源就行了:
npm config set registry https://registry.npm.taobao.org
添加完成不用重启电脑!!!!只需重启命令行!!!!!
后面的问题我相信都不是大问题了,将本该用npm的命令全部替换为cnpm就行了!
没有反应的crtl+c终止掉再跑一遍,多跑几遍试试!反正我这里的网是很不科学!
最后希望大家能安装成功
-
$.ajax({
url:url,
data:{uid:uid},
type:"post",
dataType:"json",
beforeSend: function(){
$('.loading').css('display','block');
},
success:function (data) {
$('.loading').css('display','none');
$('.count').html(data.count);
$('.pv').html(data.pv);
}
})
-
外部调用layui.use内定义的函数需要引入 layui.all.js ,并定义 window.xxx函数
自己亲测:
<script src="/static/layui/layui.all.js"></script>
<script>
//Demo
layui.use('form', function(){
window.form = layui.form;
});
</script>
使用
<script>
window.form.on('submit(formDemo)', function(data){
layer.msg(JSON.stringify(data.field));
return false;
});
</script>
使用layui.all.js即可
-
很多时候我们在登录的时候需,输入完密码和账号之后习惯性的回车,
但是如果没有绑定回车键的事件的时候是不好使的!下面就看看回车键如何绑定
//回车键绑定登录
$(function(){
document.onkeydown = function(e){
var ev = document.all ? window.event : e;
if(ev.keyCode==13) {
login();
}
}
});
function login() {
var url="/admin/user/login.html";
var data = $("form").serialize();
$.post(url,data,function(e){
if(e.status == 1){
success(e.msg);
window.location.href=e.next_url;
}else {
error(e.msg)
return false;
}
});
}
以上就是如何绑定回车键!希望对大家有所帮助!
-
================20181229更=============
1.汉字转拼音 ---- fengqi/hanzi
短信 ---- overtrue/easy-sms (支持阿里云,阿里大鱼,云片,螺丝帽等等)
3.微信easywechat ---- overtrue/wechat(支持laravel tp等框架)
4.表格pdf,csv ---- phpoffice/phpspreadsheet
5.数据备份 ---- spatie/laravel-backup (数据库备份,文件备份,一行命令搞定)
6.像素头像 ---- yzalis/identicon (gitHub那种头像)
7.数据字典 ---- jormin/laravel-ddoc (好像只支持laravel5.5)
8.二维码 ---- bacon/bacon-qr-code
9.获取设备品牌 版本 piwik/device-detector (包括手机电脑等os系统。版本,使用的app==)
symfony/var-dumper
symfony的dump格式化包,友好、直观dump数据,可自定义css样式。(laravel使用的也是这个)
filp/whoops
错误信息追踪,美观的样式,友好的展示,最佳的调试。
intervention/image 图片处理大小裁剪等
cartalyst/sentry 权限插件[没有亲自试用过,文档好像不是很多]
geoip2/geoip2
IP地理位置信息
rize/uri-template url生成,应该会用得到
hashids/hashids 生成数字id,可以用来将文章的id进行加密解密操作,确保安全
guzzlehttp/guzzle 可以获取网页源代码等,详细请自己搜索
geoip2/geoip2 根据ip 获取信息 https://packagist.org/packages/geoip2/geoip2
james-heinrich/phpthumb 图片处理 http://phpthumb.sourceforge.net/demo/demo/phpThumb.demo.demo.php 可在线裁剪,避免图片大小不一致导致的排版混乱
-
浏览器比例不是100%的时候,会导致页面错乱!
众所周知:移动端页面禁止用户缩放界面只需加上<meta name="viewport" content="user-scalable=0">即可,但是pc端确实比较麻烦,用户可以通过如下几种方式来缩放:
windows:
ctrl + +/-
ctrl + 滚轮
浏览器菜单栏
mac:
cammond + +/-
浏览器菜单栏
由于浏览器菜单栏属于系统软件权限,没发控制,我们着手解决ctrl/cammond + +/- 或 Windows下ctrl + 滚轮 缩放页面的情况,只能通过js来控制了
Reference:
stackoverflow关于组织缩放的代码:http://stackoverflow.com/questions/27116221/prevent-zoom-cross-browser
jquery event.whick源码,先取charCode(mdn说明其已被废弃)再取keyCode: https://github.com/jquery/jquery/blob/master/src/event.js#L633
下面是用juery和原生js实现的代码:
<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
<script type="text/javascript">
// 判断pc浏览器是否缩放,若返回100则为默认无缩放,如果大于100则是放大,否则缩小
function detectZoom (){
var ratio = 0,
screen = window.screen,
ua = navigator.userAgent.toLowerCase();
if (window.devicePixelRatio !== undefined) {
ratio = window.devicePixelRatio;
}
else if (~ua.indexOf('msie')) {
if (screen.deviceXDPI && screen.logicalXDPI) {
ratio = screen.deviceXDPI / screen.logicalXDPI;
}
}
else if (window.outerWidth !== undefined && window.innerWidth !== undefined) {
ratio = window.outerWidth / window.innerWidth;
}
if (ratio){
ratio = Math.round(ratio * 100);
}
return ratio;
};
//window.onresize 事件可用于检测页面是否触发了放大或缩小。
$(function(){
//alert(detectZoom())
})
$(window).on('resize',function(){
isScale();
});
//判断PC端浏览器缩放比例不是100%时的情况
function isScale(){
var rate = detectZoom();
if(rate != 100){
//如何让页面的缩放比例自动为100,'transform':'scale(1,1)'没有用,又无法自动条用键盘事件,目前只能提示让用户如果想使用100%的比例手动去触发按ctrl+0
console.log(1)
alert('当前页面不是100%显示,请按键盘ctrl+0恢复100%显示标准,以防页面显示错乱!')
}
}
//阻止pc端浏览器缩放js代码
//由于浏览器菜单栏属于系统软件权限,没发控制,我们着手解决ctrl/cammond + +/- 或 Windows下ctrl + 滚轮 缩放页面的情况,只能通过js来控制了
// jqeury version
$(document).ready(function () {
// chrome 浏览器直接加上下面这个样式就行了,但是ff不识别
$('body').css('zoom', 'reset');
$(document).keydown(function (event) {
//event.metaKey mac的command键
if ((event.ctrlKey === true || event.metaKey === true)&& (event.which === 61 || event.which === 107 || event.which === 173 || event.which === 109 || event.which === 187 || event.which === 189)){
event.preventDefault();
}
});
$(window).bind('mousewheel DOMMouseScroll', function (event) {
if (event.ctrlKey === true || event.metaKey) {
event.preventDefault();
}
});
});
</script>
引用自https://www.cnblogs.com/dearxinli/p/7645922.html
-
柯曾栎
12-20 14:15
米醋儿
830
特别实用的多维数组排序用法示例!如果你的版本报错的话,请检测你的PHP版本是否支持
array_multisort()
函数
用PHP自带array_multisort函数排序
<?php
$data = array();
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
// 取得列的列表
foreach ($data as $key => $row)
{
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
print_r($data);
?>
输出结果:
复制代码 代码如下:
Array
(
[0] => Array
(
[volume] => 98
[edition] => 2
)
[1] => Array
(
[volume] => 86
[edition] => 1
)
[2] => Array
(
[volume] => 86
[edition] => 6
)
[3] => Array
(
[volume] => 85
[edition] => 6
)
[4] => Array
(
[volume] => 67
[edition] => 2
)
[5] => Array
(
[volume] => 67
[edition] => 7
)
)
-
废话我就不多说了,直接开始教程!
假设没以为phper都会微信公众号的开发,每一个接口都能顺利的调取!
如果你有一定的基础 推荐你使用easywechat框架!不用重复造轮子!真好
需要准备
① 已认证订阅号 一个
② 已认证服务号 一个
③ 微信开放平台
需要操作的步骤
一:再微信开放平台分别绑定 订阅号和 服务号
https://open.weixin.qq.com/
绑定好就可以开始操作了!
下面就是口述了,文字功底不太好,需要大家仔细阅读,多多思考!
当我们把2个微信绑定了开放平台后,用户信息会多一个unionid
没绑定公众平台是没有这个unionid的
然后我们再订阅号中做微信授权登录!但是授权登录中的appid 和secret 需要使用服务号的appid和secret!这样我们的服务器就可以获取到用户的信息以及unionid
这个是我微信公众号的截图!
可以获取到unionid,然后再订阅号中,再用户订阅的时候,将用户的unionid 、openid以及其他信息保存到数据库中,用户借用服务号权限登录后,根据用户的unionid去数据库中进行比对!
ok,好像说完了!
开发qq571031767
本demo需要积分查看下载链接
如果需要demo等其他信息,付费联系qq571031767!
-
10月24日晚间19点,三星将在古城西安(西安城墙北门)举办A系列新品发布会。本次发布会都会带来哪些新品?除了备受瞩目的Galaxy A系列后置四摄新机之外,还有哪些特别的惊喜?驱动中国作为受邀媒体将为大家全程直播,敬请关注!
<div class="bs-callout bs-callout-info">视频直播</div>
<iframe src="https://vku.youku.com/live/ilpshare?id=8006307" width="100%" height="460" frameborder="0" allowfullscreen="true"></iframe>
<script>
var width = window.screen.width;
if(width > 800){
width = 800;
}
var height = width * 0.6 ;
$('iframe').css('height',height);
</script>
-
数据库中有这样一张表,我们想找到type字段中包含1的所有结果!
完成有2中形式,一种是like语句,另一种就是 find_in_set
like不多做jiangjie
下面是 find_in_set 语句
SELECT * FROM test WHERE FIND_IN_SET('2',type)
SELECT * FROM test WHERE FIND_IN_SET('1',type)
上面的示例,大家就清楚了!
-
柯曾栎
09-11 17:11
米醋儿
577
1、登陆mysql数据库
mysql -u root -p
查看user表
mysql> use mysql;
Database changed
mysql> select host,user,password from user;
+--------------+------+-------------------------------------------+
| host | user | password |
+--------------+------+-------------------------------------------+
| localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+--------------+------+-------------------------------------------+
2 rows in set (0.00 sec)
可以看到在user表中已创建的root用户。host字段表示登录的主机,其值可以用IP,也可用主机名,
(1)有时想用本地IP登录,那么可以将以上的Host值改为自己的Ip即可。
2、实现远程连接(授权法)
将host字段的值改为%就表示在任何客户端机器上能以root用户登录到mysql服务器,建议在开发时设为%。
update user set host = ’%’ where user = ’root’;
将权限改为ALL PRIVILEGES
mysql> use mysql;
Database changed
mysql> grant all privileges on *.* to root@'%' identified by "root";
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,password from user;
+--------------+------+-------------------------------------------+
| host | user | password |
+--------------+------+-------------------------------------------+
| localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| % | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+--------------+------+-------------------------------------------+
3 rows in set (0.00 sec)
这样机器就可以以用户名root密码root远程访问该机器上的MySql.
3、实现远程连接(改表法)
use mysql;
update user set host = '%' where user = 'root';
这样在远端就可以通过root用户访问Mysql.
-
柯曾栎
09-11 17:02
米醋儿
1306
宝塔面板,开启 Myqls 远程连接权限宝塔面板 怎么设置远程mysql链接
具体教程如下
1. 去服务器控制台设置安全组权限,开启以下几个端口,在终端设置防火墙也可以,只要确保以下的端口开放。
3306 //Mysql端口
888 //宝塔phpmyadmin端口
2. 进入宝塔的主面板,点击安全,将上述两个端口进行放行(当前版本的宝塔面板读取防火墙还有问题,所以建议再设置一下。)
3. 点击数据库,打开 phpmyadmin,使用 root 用户登录,然后找到 root 或者其它用户,点击编辑权限。
4. 在登录信息中,只需要修改一个地方,将主机设置为任意主机,然后点击执行。随后可以去宝塔面板重启数据库,就可以远程连接了。
来源https://www.ruletree.club/
本文发布自micuer.com!
-
tp5中如何把百度富文本编辑器封装成插件的方式调用,tp3可借鉴思路
在实际开发中,富文本编辑器的使用不可或缺!
使用频率也非常非常的高!但是每一次引用,都重新写一大推的js去调用又显得麻烦!
看cms框架中都将其封装成插件或者函数的形式调用!于是自己也动手写了个最笨的办法!
但是实用啊~~ 同志们
1:下载并布局富文本编辑器
我的如下图
2:修改富文本编辑器中的PHP上传文件[自己动手修改,或者到文末查看我分享的ueditor压缩包]
3:再common.php中建立函数
具体函数如下
/**
* @param $name
* 快速引用百度富文本编辑器
*/
function ueditor($name){
echo ' <script type="text/javascript" charset="utf-8" src="//'.$_SERVER['HTTP_HOST'].'/static/ueditor/ueditor.config.js"></script>';
echo ' <script type="text/javascript" charset="utf-8" src="//'.$_SERVER['HTTP_HOST'].'/static/ueditor/ueditor.all.min.js"> </script>';
// <!--建议手动加在语言,避免在ie下有时因为加载语言失败导致编辑器加载失败-->
// <!--这里加载的语言文件会覆盖你在配置项目里添加的语言类型,比如你在配置项目里配置的是英文,这里加载的中文,那最后就是中文-->
echo '<script type="text/javascript" charset="utf-8" src="//'.$_SERVER['HTTP_HOST'].'/static/ueditor/lang/zh-cn/zh-cn.js"></script>';
echo '<textarea id="'.$name.'" name="'.$name.'" type="text/plain" style="width:1024px;height:500px; z-index: 1;margin-top: 100px;"></textarea>';
$str = <<<EOT
<script type="text/javascript">
var ue = UE.getEditor('{$name}', {
toolbars: [
[
'source', //源代码
// 'anchor', //锚点
'undo', //撤销
'redo', //重做
'bold', //加粗
// 'indent', //首行缩进
// 'snapscreen', //截图
'italic', //斜体
'underline', //下划线
'strikethrough', //删除线
// 'subscript', //下标
// 'fontborder', //字符边框
// 'superscript', //上标
'blockquote', //引用
// 'pasteplain', //纯文本粘贴模式
// 'horizontal', //分隔线
// 'time', //时间
// 'date', //日期
// 'insertrow', //前插入行
// 'insertcol', //前插入列
// 'mergeright', //右合并单元格
// 'mergedown', //下合并单元格
// 'deleterow', //删除行
// 'deletecol', //删除列
// 'splittorows', //拆分成行
// 'splittocols', //拆分成列
// 'splittocells', //完全拆分单元格
// 'deletecaption', //删除表格标题
'inserttitle', //插入标题
// 'mergecells', //合并多个单元格
// 'deletetable', //删除表格
// 'insertparagraphbeforetable', //"表格前插入行"
'insertcode', //代码语言
'fontfamily', //字体
'fontsize', //字号
'paragraph', //段落格式
'customstyle', //自定义标题
// 'edittable', //表格属性
// 'edittd', //单元格属性
'link', //超链接
'unlink', //取消链接
// 'gmap', //Google地图
// 'help', //帮助
'justifyleft', //居左对齐
'justifyright', //居右对齐
'justifycenter', //居中对齐
'justifyjustify', //两端对齐
'forecolor', //字体颜色
'backcolor', //背景色
'insertorderedlist', //有序列表
'insertunorderedlist', //无序列表
'fullscreen', //全屏
// 'directionalityltr', //从左向右输入
// 'directionalityrtl', //从右向左输入
// 'rowspacingtop', //段前距
// 'rowspacingbottom', //段后距
// 'pagebreak', //分页
// 'insertframe', //插入Iframe
// 'imagenone', //默认
// 'imageleft', //左浮动
// 'imageright', //右浮动
'attachment', //附件
'imagecenter', //居中
'wordimage', //图片转存
'lineheight', //行间距
// 'edittip ', //编辑提示
// 'webapp', //百度应用
// 'touppercase', //字母大写
// 'tolowercase', //字母小写
'background', //背景
// 'template', //模板
'scrawl', //涂鸦
'music', //音乐
// 'inserttable', //插入表格
// 'drafts', // 从草稿箱加载
'charts', // 图表
'formatmatch', //格式刷
'print', //打印
'preview', //预览
'selectall', //全选
'removeformat', //清除格式
'cleardoc', //清空文档
'searchreplace', //查询替换
'map', //Baidu地图
'emotion', //表情
'spechars', //特殊字符
'simpleupload', //单图上传
'insertimage', //多图上传
'insertvideo', //视频
'autotypeset', //自动排版
]
],
autoHeightEnabled: true,
autoFloatEnabled: true
});
</script>
EOT;
echo $str;
}
大家也可以自行修改!
4:实用方法;
{:ueditor('content')}
好了!这就是简易教程!里面最容易出现的问题就是js引用路劲不成功!这点针对你具体的项目,需要做具体的调整!
下面是我的ueditor的压缩包!
下载需要1积分!注册免费送20积分!
-
在事迹项目开发中我们经常会遇到这样的情景!
用户点击了个人中心左侧的导航菜单,但是左侧菜单没有明显的不同[也就是选中了哪个,我也不清楚]的情况!
所以,再做开发的时候我们要求用户点击了当前菜单,必须给用户一个明确的显示 比如:颜色变红等 也就是新增一个选中的class名 如current
但是我们如何判断再当前的菜单呢?
有2中思路
1:再控制器中assing 一个变量代表当前的菜单 判断当前assing过来的变量和菜单中的值相等的时候,就赋值current
2:判断当前的控制器名 和action名 如果都和 a中的href对上了 就赋值 current 的class名
思路如此 怎么实现呢?
下面直接上代码
<a {if condition="{:request()->controller()} eq 'user'"} class="current" {/if} href="{:url('index/User/ziliao')}"></i>上传学习资料</a>
好像上面的是有问题的,当然也可以这样
<a <?php if((request()->controller() == 'User') && (request()->action() == 'ziliao')):?>class="current"<?php endif;?> href="{:url('index/User/ziliao')}"></i>上传学习资料</a>
附在模板和控制器中获取控制器名的代码
$module = request()->module();
$controller = request()->controller();
$action = request()->action();
控制器中如上
模板中如下
{:request()->module()}
以此类推!
教程结束!感谢查阅,本文首发自micuer.com
跟多教程请关注米醋儿网
-
有时候会用到时间戳!获取月排行什么的!需要自然月的算法!
尽管tp5中有时间函数已经很强大了,但是里面没有给出自然月的算法!
下面我就把我写的自然月算法贴出来,尽管不完善,大家拿去后将算法完善下
function NaturalMonth()
{
//如果本月是一月份 则获取上一年12月份的时间戳
if(date("m",time()) ==1){
$d[] = strtotime( (date("Y")-1)."-12-".date("d")); //上个月今天的时间戳
}else{
$d[] = strtotime( date("Y")."-".(date("m")-1)."-".date("d")); //上个月今天的时间戳
}
$d[] = strtotime(date("Ymd",time())."23:59:59");//今天 23.59.59的时间戳
return $d
}
为什么不完善,比如如果今天是7月31号,则获取到的上个月的开始时间就是6月31号,尽管6月没有3号!
大家自行完善一下吧!
-
很多时候,在富文本编辑器上传图片后,会自动给img标签加上 style样式限制图片的宽高!
正式因为这些代码,会导致手机端浏览文章的时候图片变形,影响用户体验!
下面就介绍下最简单直接的办法解决它
<!--手机版 img页面强制适配 201807 23 by 技术部-->
var tags = $("#content-show img");
for (var i = 0; i < tags.length; i++) {
tags[i].removeAttribute('style');
}
代表去除id为content-show下面所有的img标签中的style样式
如果你要去除div的style样式如下
<!--手机版 img页面强制适配 201807 23 by 技术部-->
var tags = $("#content-show div");
for (var i = 0; i < tags.length; i++) {
tags[i].removeAttribute('style');
}
以此类推
如果喜欢的话,收藏下micuer.com吧!
-
php下关于Cannot use a scalar value as an array的解决办法
其实这个问题很简单,犯这种错误的人可能是逻辑思维不够谨慎
$where["ganbuleixing"] = ["neq","非干部"]; //干部类型 科级干部 后备干部 非干部
if($keyword = Request::instance()->param("keyword")){
$where["title"] = ["like","%".$keyword."%"];
}
这样肯定不会报错
但是
if($keyword = Request::instance()->param("keyword")){
$where["title"] = ["like","%".$keyword."%"];
}else{
$where = 1;
}
$where["ganbuleixing"] = ["neq","非干部"]; //干部类型 科级干部 后备干部 非干部
这样的话就有几率报错,如果没有传递keyword这个参数,必然报错!因为此时where = 1
好了,就简单指点一下!大家仔细柑橘这里的逻辑对应下自己的代码
-
thinkphp5、tp5中的多表关联查询[A表中有个外键包含b,b表中有个外键包含c,将abc表关联查询]三表查询
相信上述的例子经常会遇到!同样,如果在控制其中直接使用join链接查询的话,代码冗余!复用低
下面描述下tp5中model模型的实现方式
1:A[ziliao]表
class Ziliao extends Model
{
function User()
{
return $this->hasOne('Users','id','uid');
}
}
2:B(用户表)
<?php
namespace app\common\model;
use think\Model;
class Users extends Model
{
function OrganisationInformation()
{
return $this->hasOne('OrganisationInformation','id','ogid');
}
}
3:C【组织信息表】即这个用户属于哪个党委
<?php
namespace app\common\model;
use think\Model;
class OrganisationInformation extends Model
{
}
4:model对应创建好了,我们来理里关系!
A表[ziliao]:储存了用户上传的学习资料,其中有个uid的字段,代表属于哪个用户
B表【user】:储存了用户的信息,其中有个ogid的字段代表它属于哪个组织
OrganisationInformation
C表[OrganisationInformation]储存了一些党委的信息,如地点,创建时间等信息
5:调用
关系理清了我们就来讲讲再控制器controller中的调用方式
$id = \request()->param("id");
$res = \app\common\model\Ziliao::with("user,user.OrganisationInformation")->find($id)->toArray();
p($res);
返回的接果如下
Array
(
[id] => 2
[title] => 学习邓小平精神
[uid] => 1402
[add_time] =>
[status] => 0
[imgs] =>
[ogid] => 7
[user] => Array
(
[id] => 1402
[username] => test
[idnumber] => 600230916665544455
[password] => 098f6bcd4621d373cade4e832627b4f6
[name] => 柯曾栎
[sex] => 1
[age] => 25
[birthday] =>
[native_place] =>
[nationality] => 汉族
[email] => 571031767@qq.com
[headimgurl] => /public/uploads/20180813/23ba7944052ebce55bf26cad307aeae3.jpg_small.png
[score] =>
[qualifications] => 博士
[reg_time] =>
[zhuanye] =>
[yubei_time] => 1970
[join_party_time] => -28800
[intrstime] => 1970
[introduce] =>
[where_now] =>
[address] => 西安
[logintime] => 0
[logouttime] => 0
[loginnum] => 0
[phone] => 15334555112
[ogid] => 7
[user_type] => 2
[job] => 软件工程师
[status] => 3
[lose] => 0
[losetime] =>
[liudong_status] => 0
[liuchufangxiang] =>
[is_excellent] => 0
[excellent_add_time] =>
[excellent_desc] =>
[dangneizhiwu] => 你猜猜
[jieshaoren] => ""
[organisation_information] => Array
(
[id] => 7
[pid] =>
[name] => 中共延长油田股份有限公司定边采油厂保卫科支部委员会
[img] =>
[type] => 631 党支部
[danwei] =>
[shuji] => 王军
[connect_user_name] => 王军
[phone] => 13335329888
[create_time] => 1970-01-01 08:00:00
[intro] =>
[address] => 定边县
[youbian] => 0
[other_info] =>
[ordid] => 255
)
)
)
好啦,教程到此结束!学会学不会不关本人的事了!喜欢收藏下吧!
本文出自 micuer.com转载请注明出处
http://micuer.com/index.php?m=index&a=read&id=315
-
关联查询用的非常多,再日常中2张表。3张表、4张表甚至更多张表的关联查询都会出现!
如果我们只在控制器中采用__BIAOMING__ 【join】的方式查询会导致代码非常的长,并且复用率也特别低
所以还是使用model类进行关联查询省代码量,还提高了复用率!
下面就简单以3张表为例向大家示范一下tp5[thinkphp5]中的多表使用[2张表都会用,现省略]
1首先建立model类
我的是建立在common目录下,提供前后台共同使用
2:在主model类中添加关联
我的主model 是Siagngchuangjian
代码如下
<?php
namespace app\common\model;
use think\Model;
class Sigangchuangjian extends Model
{
function SigangchuangjianType()
{
return $this->hasOne('SigangchuangjianType','id','type_id');
}
function OrganisationInformation()
{
return $this->hasOne('OrganisationInformation','id','ogid');
}
}
其他2个model代码如下
<?php
namespace app\common\model;
use think\Model;
class OrganisationInformation extends Model
{
}
<?php
namespace app\common\model;
use think\Model;
class SigangchuangjianType extends Model
{
}
下面是控制器调用的代码:
$res = Sigangchuangjian::with("SigangchuangjianType,OrganisationInformation")->where(["id"=>4])->select();
for ($i = 0;$i < count($res);$i++){
p($res[$i]->toArray());
}
p($res);
die;
其实这些方式在文档中都有,只是我们部分人看文档不可能面面俱到!
希望上述对各大网友有所帮助,举一反三、很重要!
本文首发于 micuer.com
转载请注明出处
-
日常生活中,表格的导入很多!每次做导入的时候还需要百度一下,很麻烦!
这次稍微总结下方法吧!
本方法适用tp5.0框架
适用的方法也简单!希望对大家能有点帮助吧!
由于我这次本机的composer安装后需要重启,但是我电脑上的项目又特别赶时间,算了,还是老土办法吧!
下面开始上教程
1:下载PHPexcel包
下载地址:https://github.com/PHPOffice/PHPExcel 点击下载zip包就可以了!
2:解压文件并重命名
3:上传到服务器的application目录下,具体如上图所示
4:创建导入的控制器,由于我这里是导入试题,所以我的控制器是exam。php
5:结合layui的上传插件,再控制器中实现数据的插入
/**
* 新建试题
*/
public function add()
{
require_once APP_PATH."myclass/PHPExcel/PHPExcel.php";
require_once APP_PATH."myclass/PHPExcel/PHPExcel/IOFactory.php";
require_once APP_PATH."myclass/PHPExcel/PHPExcel/Reader/Excel5.php";
$file = request()->file('file');
if($file){
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads/exam');
$filename = $file->getInfo()["name"];
$path = '/public/uploads/exam/'.$info->getSaveName();
$objReader=\PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
$objPHPExcel=$objReader->load(".".$path);//$file_url即Excel文件的路径
$sheet=$objPHPExcel->getSheet(0);//获取第一个工作表
$highestRow=$sheet->getHighestRow();//取得总行数
$highestColumn=$sheet->getHighestColumn(); //取得总列数
$data = array();
//循环读取excel文件,读取一条,插入一条
for($j=2;$j<=$highestRow;$j++){
//从第一行开始读取数据
$str='';
for($k='A';$k<=$highestColumn;$k++){ //从A列读取数据
//这种方法简单,但有不妥,以'\\'合并为数组,再分割\为字段值插入到数据库,实测在excel中,如果某单元格的值包含了\\导入的数据会为空
$str.=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'\\';//读取单元格
}
//explode:函数把字符串分割为数组。
$strs=explode("\\",$str);
$d["content"] = $strs[1];
$d["A"] = $strs[2];
$d["B"] = $strs[3];
$d["C"] = $strs[4];
$d["D"] = $strs[5];
$d["answer"] = $strs[6];
$d["add_time"] = time();
array_push($data,$d);
}
$exam["title"] = $filename;
$exam["add_time"] = time();
$exam["question_count"] = count($data);
$exam["every_question_score"] = 100/count($data);
//试题名查重
if(Db::name("exam")->where(["title"=>$filename])->find()){
return json(["code"=>40000,"msg"=>"试卷名重复,请检查是否早已导入"]);
}
$exam_id = Db::name("exam")->insertGetId($exam);//试卷名的完善和导入
foreach ($data as $k=> $v){
$data[$k]["exam_id"] = $exam_id;
}
$res = Db::name("exam_questions")->insertAll($data);
unlink(".".$path); //删除excel文件
if($res){
return json(["code"=>200,"msg"=>"导入成功"]);
}else{
return json(["code"=>40000,"msg"=>"导入失败"]);
}
}
return $this->fetch();
}
大家根据自己创建的文件目录去修改自己引入的excel的包路劲!
require_once APP_PATH."myclass/PHPExcel/PHPExcel/Reader/Excel5.php";如果报错试试
require_once APP_PATH."myclass/PHPExcel/PHPExcel/Reader/Excel2017.php";
其他报错可以参考
https://www.cnblogs.com/cqingt/p/5338023.html
代码下载地址【包含控制器文件】:
链接:https://pan.baidu.com/s/1Rvw4iSnM17NHEOA_CSS1ZA 密码:059h
本文由米醋儿网首发!转载请注明出处