精华内容
下载资源
问答
  • 经过查询得知一个自定义中包含多个自定义可以多个association进行映射的,如下: //实体 @Data @NoArgsConstructor @AllArgsConstructor public class Detail { private String id; private String ...

    经过查询得知一个自定义类中包含多个自定义类是可以写多个association进行映射的,如下:

    //实体类
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Detail {
        private String id;
        private String title;
        private String description;
        private String student_id;
        private String teacher_id;
        private String answer;
        private Date create_date;
        //下面两个是自定义类
        private Teacher teacher;
        private Student student;
        
    }
    
    
    <!--  一个resultMap 包含多个association  -->
    	<select id="querryAll" resultMap="res1">
            select b.*,rn
            from
             (select d.id did,d.title,d.description,d.answer,d.create_date,t.id tid,t.realname realname,s.id sid,s.name sname,ROWNUM rn
                from IN_DETAIL d left join in_teacher t
                on d.teacher_id=t.id
                left join IN_STUDENT s
                on d.STUDENT_ID=s.ID
                 ORDER BY did desc
            ) b
            where rn between #{begin} and #{end}
        </select>
        <resultMap id="res1" type="Detail">
            <id column="did" property="id"></id>
            <result column="title" property="title"></result>
            <result column="description" property="description"></result>
            <result column="answer" property="answer"></result>
            <result column="create_date" property="create_date"></result>
            <association property="teacher" javaType="Teacher">
                <id column="tid" property="id"></id>
                <result column="realname" property="realname"></result>
            </association>
            <association property="student" javaType="Student">
                <id column="sid" property="id"></id>
                <result column="sname" property="name"></result>
            </association>
        </resultMap>
    
    展开全文
  • 一、序言 laravel 中提供了两种验证请求数据的方法,第一种方法适用于简单的验证,表单验证和...(本文只介绍了接口验证和返回错误处理,form表单提交可以看文章底部参考文章中的第一个链接)。以下代码写于 l...

    一、序言

    laravel 中提供了两种验证请求数据的方法,第一种方法适用于简单的验证,表单验证和业务逻辑放在一起,显得业务代码臃肿,而且重复的验证规则基本也是复制粘贴,代码也不好看,这是关键。本篇教程就不说这个了,需要了解的请戳这里。第二种就是建立请求验证类,下面就详细说一说这个。(本文只介绍了接口验证和返回错误处理,form表单提交可以看文章底部参考文章中的第一个链接)。

    二、正文

    表单请求是包含验证逻辑的自定义请求类,要创建表单验证类,可以使用 Artisan 命令 make:request ,我们可以先创建一个基类,然后创建对应的表单类。
    ps:生成的类文件默认是在 app/Http/Requests 目录下
    创建命令如下:

    // 创建基类
    php artisan make:request BaseRequest
    // 系统配置的表单验证类,创建成功后需要手动修改下让它继承基类
    php artisan make:request SystemConfigRequest

    BaseRequest.php 基类里面的 authorize 方法里面默认 return false ,这个方法是判定用户是否有权限发起请求的,我们一般都不会在这个地方判断请求权限吧,所以给他改成默认返回true,如果你有啥特殊需求的话就可以在这里验证权限。
    代码如下:

    <?php
        namespace App\Requests;
    
        use Illuminate\Foundation\Http\FormRequest;
    
        class BaseRequest extends FormRequest
        {
            /**
             * @var 当前表单验证使用的规则
             */
            protected $useRules = [];
    
            // 各种验证规则的错误提示,当你子类里面添加了新的规则这里也需要加上,或者在子类复写该变量
            protected $errorMsg = [
                'required' => '为必填项',
                'min'      => '最小为:min',
                'max'      => '最大为:max',
                'between'  => '长度在:min和:max之间',
                'integer'  => '必须为整数',
                'string'   => '必须为字符串',
                'regex'    => '格式错误',
                'unique'   => '已存在',
                'present'  => '字段值可以为空但是必传',
                'array'    => '必须是数组格式',
                'json'     => '不是有效的json格式',
            ];
    
            /**
             * Determine if the user is authorized to make this request.
             *
             * @return bool
             */
            public function authorize()
            {
                return true;
            }
    
            /**
             * messages 返回给前台的错误信息转换成自定义提示,默认提示是英文
             * @return array
             */
            public function messages()
            {
                $array = [];
                foreach ($this->useRules as $key => $value) {
                    // 获取单个字段的多个验证规则
                    if (!is_array($value))
                        $new_arr = explode('|', $value);
                    else
                        $new_arr = $value;
                    foreach ($new_arr as $k => $v) {
                        // 获取单个规则的前部分
                        $v = array_first(explode(':', $v));
                        // 最终得到每个字段对应的规则返回消息
                        $array[$key . '.' . $v] = ':attribute' . $this->errorMsg[$v];
                    }
                }
                return $array;
            }
        }
    

    SystemConfigRequest.php 系统配置请求验证类里面可以定义添加,修改等操作的请求数据验证的规则,其中 config.*.title 的写法是验证请求过来的数组中的字段,实际验证字段是 config[0][title] 。还有使用 regex 模式时,规则必须放在数组中,而不能使用管道分隔符,尤其是正则表达式中已经使用了管道符号时。验证规则有许多,就不一一介绍了,有需要的话可以去看下文档。《 [ Laravel 5.5 文档 ] 处理用户请求 —— 请求表单验证及错误处理大全 》
    下面看下系统配置请求验证类怎么写的,代码如下:

    <?php
        namespace App\Requests;
        // 这里要继承上面创建的 BaseRequest 基类哦,别忘了
        class SystemConfigRequest extends BaseRequest
        {
            /**
             * @var array 定义验证规则
             */
            private $rules = [
                // 这里代表创建表单需要验证的字段
                'create' => [
                    'testCreate' => 'required'
                ],
                // 更新表单需要验证的字段
                'update' => [
                    'testUpdate' => 'required'
                ],
                // 不管是创建还是更新都要验证的字段
                'edit'   => [
                    'config.*.title' => 'required|string',
                    'config.*.details' => 'present',
                    'config.*.set_key' => 'required|string',
                    'config.*.set_value' => 'present',
                    'token'  => 'required|string',
                ],
            ];
    
            /**
             * Get the validation rules that apply to the request.
             *
             * @return array
             */
            public function rules()
            {
                // 根据不同的请求, 添加不同的验证规则,将对应的请求的规则和公共的规则合并
                if (static::getPathInfo() == '/api/system/setconfig')
                {
                    $this->useRules = array_merge($this->rules['create'], $this->rules['edit']);
                }
                if (static::getPathInfo() == '/api/system/editconfig')
                {
                    $this->useRules = array_merge($this->rules['update'], $this->rules['edit']);
                }
                return $this->useRules;
            }
    
            /**
             * attributes 设置各个字段的中文注解
             * @return array
             * @author   liuml  <liumenglei0211@163.com>
             * @DateTime 2018/9/13  20:34
             */
            public function attributes()
            {
                return [
                    'token'    => '令牌',
                    'config'  => '配置项',
                    'config.*.title'  => '配置项中标题',
                    'config.*.details'  => '配置项中详情',
                    'config.*.set_key'  => '配置项中设置的键名',
                    'config.*.set_value'  => '配置项中设置的键值',
                ];
            }
        }
    

    控制器中需要使用的时候,直接注入就行了

    /**
     * addConfig
     * @param SystemConfigRequest $request
     * @return \Illuminate\Http\JsonResponse
     * @throws BusinessExceptions
     */
    public function addConfig(SystemConfigRequest $request){
        $config = $request->post();
        $res = $this->systemConfigLogic->setConfig($config);
        if($res){
            return $this->returnData(1);
        }
        return $this->returnData(0);
    }

    下面这张图返回的错和上面的验证规则不是匹配的,懒得换对应的图了,反正知道返回的错是这样的就行,当然下图的返回错误是处理过后返回的。至于如何处理的话看结尾的图例
    postman

    自定义返回格式啥的在 app\Exceptions\Handler 这里处理就行。
    render 方法中添加下面代码就行,当然你是没有returnData方法的。自己封装一个响应的函数就行。或者直接使用 laravel 中的 response 函数就行

    // 判断该异常是否是参数验证错误的异常,是的话直接返回
    if ($exception instanceof ValidationException) {
        $error = array_first(array_collapse($exception->errors()));
        return returnData(20000, $error);
    }

    这里写图片描述

    参考文章:
    https://www.jianshu.com/p/0225e63454e8
    https://laravelacademy.org/post/7978.html

    展开全文
  • 只从一个view拉线到的属性时,会出现这个属性为null的情况,解决办法是:不要从xib往上拉线,而要从往xib上拉,拉到xib上得时候要把弹出来的框里所有的view都点上。这样就不会null了,可以正常用了。目前还不...
    只从一个view拉线到类的属性时,会出现这个属性为null的情况,解决办法是:不要从xib往类上拉线,而要从类往xib上拉,拉到xib上得时候要把弹出来的框里所有的view都点上。这样就不会null了,可以正常用了。目前还不知道机制为什么是这样,这是随身炉石项目里ENMediaCell有多个xib,在视频缓存里titleHeightContraint总是为null时发现的。
    
    展开全文
  • 1.一个信号对应多个槽时,槽函数的执行顺序是怎样的??? 2.多个信号对应一个槽时,如何在槽函数中判断信号的发出者是谁(来自哪个的对象)? 下面对这两种情况分别进行验证: 实例演示1:对一个信号对应多个槽时...
  • 一个java文件中是否可以定义多个类

    万次阅读 2018-09-08 21:40:57
    一个java文件中可以定义个类,但是最多只有一个类被public修饰,并且这个类的类名与文件名必须相同,若这个文件中没有public的类,则文件名随便是一个类的名字即可。余姚注意的是,当用javac指令编译有个类的...
  • 现在我需要把线程池这一部分的内容从该service层提取出来,做一个工具类也可以,其他实现也可以,自己试过用ThreadPoolExecutor这个类来写工具类,但是该类构造器内部需要一个队列,查看该队列存放的数据类型,只能...
  • 编译器每编写一个.java文件(编译单元),会输出很与java文件的名称对应的从class文件,不仅仅限制于public修饰的。但是public是用来编译单元存在的公开接口。如果没有的话,运行会报错,提示找不到加载的。...
  • 一个Java文件可以定义个类,但是最多(0、1)只能有一个类被public修饰,并且这个类名与文件名必须相同;若这个类没有public的类,则文件名随便是一个类的名字即可。 需要注意的是,当Javac指令编译这个.java文件...
  • 商标类别指的是所要注册的商标所属的行业,我国采用尼斯商品分类,商标注册用商品和服务分类表共分为45,指向特定的产品与服务,其中1-34是商品类别,35-45是服务类别。...那这样到底可以吗?当然是,不...
  • 商标类别指的是所要注册的商标所属的行业,我国采用尼斯商品分类,商标注册用商品和服务分类表共分为45,指向特定的产品与服务,其中1-34是商品类别,35-45是服务类别。...那这样到底可以吗?当然是,不...
  • 我们都知道在使用hibernate提供的框架时,我们只需要写好相关配置文件,对应好映射关系,在代码中运用好SQL语句就可以很好地与数据库进行交互,往往我们都是在数据已经建好的基础上进行系列操作的,但是我们也可以在xml...
  • 废话不说直接上代码方法,这个方法是传入一个泛型为任意类型T 的集合,然后循环从集合中利用反射获取类型为T的对象的属性然后set给类型为E的对象并返回对象E。亲们可以用我写这个方法进行任意适合你需求的去改造。...
  • 我这里有三分类,每分类上面有相对应的类别ID,每分类的内容下面有查看更的功能, 我现在在每分类的上面添加了点击事件可以获取相对应容,请问如何才能让下面的查看更点击的时候能加载出当前...
  • MVC原则上是一个View对应一个Model,也就是在Controller里对View进行一次数据的传递,那么像一个网站的首页包含很多的...其实很简单,就是把很多个Model封装成一个Model再通过Controller来传递这个Model就可以了。
  • MFC创建MDI程序一个Doc对应多个View

    千次阅读 2015-02-03 20:03:53
    新建一个多文档的工程 点击确定 中间没有注释说明的就一路Next,知道下面的步骤可以选择CView的基类 点击完成应用程序框架完成 下面,就开始在工程中在插入一个视图 定义新建的名称同时选择其基类 ...
  • 今天我想查看一个方法被其它那些方法对象调用时,使用alt+7或者alt+f7都不好使,但使用idea对应的菜单栏工具肯定好使。 首先,在万不得已的时候,我们还是可以使用鼠标右键 --》 Find in Path在项目中全局搜索。...
  • 返回的是一个List这样的类型,你可以另外创建一个DTO然后通过循环,把Object[]中的每一个值,与dto中的字段对应,组成一个List的对象,例如: People , Card 一个人和身份证 People:id ,name, age;  Card:...
  • import threading import queue import time ''' queue.qsize() 返回队列的大小 queue.empty() 如果队列为空,返回True,反之False ...queue.full 与 maxsize 大小对应 queue.get([block[, timeout]])获取队列,t...
  • 一个.java文件中可以多个同级, 其修饰符只可以public/abstract/final/和无修饰符 public修饰的只能有一个,且必须要与文件名相同; 因为jvm虚拟机为了提高查找的速度,使用import语句导入的时候,只会...
  • struts2 -- 一个action实现多个方法

    千次阅读 2018-05-10 17:25:50
    SSH之action中的多个方法的调用方法public String logon(){ return "success"; } public String register(){ ... (一)动态方法调用,配置文件不变,一个action类对应配置文件中一个action标...
  • 其实,我们只需要一个Servlet就可以处理多个请求,这只需要我们在jsp页面向servlet发送请求时候,并传递一个参数,这个参数值是用来标记此请求,进入BeanServlet我们只需要对这个参数值进行判断,然后创建对应的...
  • 问题:如果一个Action需要应对多个action请求,且每个action 请求的验证规则有不一样,该如何处理? > 为每一个不同的 action 请求定义其对应的验证文件: ActionClassName_AliasName_validation.xml > 不带...
  • 着急的朋友直接看方案2,可以解决大部分这问题 方案 list作为dict的值 值允许重复' d1={} key=1 value=2 d1.setdefault(key,[]).append(value) value=2 d1.setdefault(key,[]).append(value) printd1 ...
  • 一个java只能有一个public

    千次阅读 2019-03-12 22:03:58
    相应的.class文件,而一个java文件中可以同时又多个不使用public关键字声明的,但是编译后会产生多个与之对应的.class文件,并且要执行的文件是对应多个.class的前缀名。 为什么一个文件中只能有一个pu...
  • tomcat启动项目报错:一个多个listeners启动失败,更多详细信息查看对应的容器日志文件 解决方法:打开navigator->右键build project,生成build文件夹(装class文件的)就可以启动成功了, OS:当时为了清除...
  • 种 需要再sql语句中把对应的字段起别名 ,对应类中的属性。 这样query.list() 就可以直接获取对应的对象 Map map = new HashMap();   map.put("aaa", aaaa);  SQLQuery query = getSession()....
  • 先来了解DispatchAction: 原始的配置action都是...DispatchAction,就是用来解决使用一个Action处理多个操作的能力,这是DispatchAction最大的用途,它可以帮助我们用一个Action,封装一套类似的操作方法,节省书
  • 然后有多个类都继承这个interface,其实类里都只有这么一个方法,完全不用实例 化。我通过MemCached根据key来获取对应的要调用的实现这个类的路径。但是知道类的路径后怎么调用doSomething呢?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,078
精华内容 3,231
关键字:

一个类可以对应多个