1.使用事务添加数据:

   public function create()
{
if($this->validate()) {
$trans = Yii::$app->db->beginTransaction();
$admin = new Admin();
try {
$admin->setAttributes($this->getAttributes());
$admin->status = Admin::STATUS_ACTIVED;
$admin->password_hash = Yii::$app->security->generatePasswordHash($this->password);
$admin->created_at = time();
$admin->updated_at = time();
$admin->profile_id = $this->createProfile()->id;
if($admin->save()) {
$trans->commit();
return true;
} $error = '';
foreach ($admin->errors as $es) {
foreach ($es as $e) {
$error .= ($e."<br />");
}
}
Yii::$app->session->setFlash('error', $error);
return false;
} catch (Exception $e) {
Yii::$app->session->setFlash('error', $e->getMessage());
$trans->rollBack();
return false;
}
} else {
$error = '';
foreach ($this->errors as $es) {
foreach ($es as $e) {
$error .= ($e."<br />");
}
}
Yii::$app->session->setFlash('error', $error);
return false;
} }

  2.分类的集合管理类:

class Category {
// 组合一维数组
static public function unlimitedForLevel ($cate, $parent='pid', $html = '----', $suffix = '|', $pid = null, $level = 0) {
$arr = array();
foreach ($cate as $v){
if($v[$parent] == $pid){
$v['level'] = $level + 1;
$v['prefix'] = str_repeat($html, $level) . ($level ? $suffix : '');
$arr[] = $v;
$arr = array_merge($arr, self::unlimitedForLevel($cate, $parent, $html, $suffix, $v['id'], $level + 1));
}
}
return $arr;
} // 组合多位数组
static public function unlimitedForLayer($cate,$name='child', $pid = 0) {
$arr = array();
foreach ($cate as $v){
if($v['pid'] == $pid){
$v[$name] = self::unlimitedForLayer($cate, $name, $v['id']);
$arr[] = $v;
}
}
return $arr;
} // 传递一个子分类ID返回所有的父级分类
static public function getParents($cate, $id){
$arr = array();
foreach ($cate as $v){
if($v['id'] == $id){
$arr[] = $v;
$arr = array_merge(self::getParents($cate, $v['pid']), $arr);
}
}
return $arr;
} // 传递一个父级分类ID返回所有的子级分类
static public function getChilds($cate, $pid, $name='child'){
$arr = array();
foreach ($cate as $v){
if($v['pid'] == $pid){
$v[$name] = self::getChilds($cate, $v['id'], $name);
$arr[] = $v;
}
}
return $arr;
} // 传递一个父级分类ID返回所有的子级ID
static public function getChildsId($cate, $pid){
$arr = array();
foreach ($cate as $v) {
if($v['pid'] == $pid){
$arr[] = $v['id'];
$arr = array_merge($arr, self::getChildsId($cate, $v['id']));
}
}
return $arr;
}
}

  

Yii2框架 常用函数整合的更多相关文章

  1. 【转】JS常用函数整合库 lutils

    lutils 此工具包是在 outils 的基础上,加上个人平时收集的代码片段进行的二次整合 outils的GitHub:https://github.com/proYang/outils/blob/ ...

  2. CI框架常用函数(AR数据库操作的常用函数)

    用户手册地址:http://codeigniter.org.cn/user_guide/index.html 1.查询表记录$this->db->select(); //选择查询的字段$t ...

  3. Yii2框架---常用代码

    一.Php控制器跳转 return $this->redirect('/site/index/index');   二.回调自身控制器 self::actionXxxx();   三.获取当前用 ...

  4. 十分钟能学会的框架,MVC+20个常用函数

    LazyPHP(以下简称LP)是一个轻框架. 之所以开发这么一个框架,是因为其他框架给的太多.在高压力的情况下,ORM和盘根错节的对象树反而将简单的页面请求处理复杂化,在调试和性能上带来反面效果. L ...

  5. 【Vue】Vue框架常用知识点 Vue的模板语法、计算属性与侦听器、条件渲染、列表渲染、Class与Style绑定介绍与基本的用法

    Vue框架常用知识点 文章目录 Vue框架常用知识点 知识点解释 第一个vue应用 模板语法 计算属性与侦听器 条件渲染.列表渲染.Class与Style绑定 知识点解释 vue框架知识体系 [1]基 ...

  6. 《zw版·Halcon-delphi系列原创教程》 zw版-Halcon常用函数Top100中文速查手册

    <zw版·Halcon-delphi系列原创教程> zw版-Halcon常用函数Top100中文速查手册 Halcon函数库非常庞大,v11版有1900多个算子(函数). 这个Top版,对 ...

  7. Yii2框架实现计数器功能

    思路: 因为yii2框架没有像tp框架那样的setinc这样的累加函数,所以只能在每次累加之前查出当前的这个字段的值,然后写算法累加入库 例如:

  8. Yii2框架与MongoDB拓展、Redis拓展的安装流程

    @author 周煦辰 2016-03-21 这段时间新上了一个项目,使用的是Yii2框架.这里记录一下Yii2框架.Yii2-Mongo拓展.Yii2-Redis拓展等的安装流程.因为使用的系统是W ...

  9. 《深入解剖Yii2框架》前言

    写代码需要站在巨人的肩膀上,将主要精力集中在自己所需要实现的业务上面,避免反复搭建基础服务,重复造轮子.PHP框架就是这样一些巨人的"肩膀",使得我们"站"得更 ...

随机推荐

  1. 3ds Max File Format (Part 5: How it all links together; ReferenceMaker, INode)

    At this point, you should start to familiarize yourself a bit with the publicly available 3ds Max AP ...

  2. ubuntu18+caffe+cuda

    昨天安装caffe,因为用的是cuda10.2,遇到各种问题,最终也没有安装成功.使用cmake配置成功.生成成功.编译的时候报错. /usr/local/cuda/include/cuda_runt ...

  3. [Codechef - ADITREE] Adi and the Tree - 树链剖分,线段树

    [Codechef - ADITREE] Adi and the Tree Description 树上每个节点有一个灯泡,开始所有灯泡都是熄灭的.每次操作给定两个数 \(a,b\) ,将 \(a,b ...

  4. (转)GC ROOTS

    还是英文的技术博客更给力,更清楚,本人懒,没有翻译. In your specific example, in any managed environment, Person is not a GC ...

  5. Runtime.getRuntime.exec()执行linux脚本导致程序卡死有关问题

    Runtime.getRuntime.exec()执行linux脚本导致程序卡死问题问题: 在Java程序中,通过Runtime.getRuntime().exec()执行一个Linux脚本导致程序被 ...

  6. LitElement(三)Styles样式

    1.为组件添加样式 import { LitElement, css, html } from 'lit-element'; class MyElement extends LitElement { ...

  7. C正数负数的原码补码反码以及内存地址分析

    #include<stdio.h> void swap(int a, int b); void main1(){ int i = 10; //正数的原码 00000000 00000000 ...

  8. .Net Core初体验

    对于C#语言支持(由C#1.0-C#7.1): 编码可以使用跨平台的IDE选择,就如同VS+Resharper一样方便: 运行效果:

  9. PLL

    PLL(Phase Locked Loop): 为锁相回路或锁相环,用来统一整合时脉讯号,使内存能正确的存取资料.PLL用于振荡器中的反馈技术. 许多电子设备要正常工作,通常需要外部的输入信号与内部的 ...

  10. 每天进步一点点------下载Microblaze程序到Flash

    第一步 生成下载文件(bit文件) 选择之前的工作目录,打开SDK.点击Program FPGA图标. 将bootloop项改为Hello_World.elf.点击Program.此时可以不用连接下载 ...