<?php

namespace Illuminate\Database\Eloquent;

/**
* 下面提到某些词的含义:
* 1、覆盖: 在继承该类 \Illuminate\Database\Eloquent\Model 的自定义的模型类中, 定义一个同名 field,值不一样
*/
abstract class Model1 implements ArrayAccess, Arrayable, Jsonable, JsonSerializable, QueueableEntity, UrlRoutable
{
/**
* 数据库连接,我们在 config/database.php 里面的 connections 数组定义的连接。
* usage:
* (new xxModel)->connection('mysql')
* DB::connection('pgsql')
* 或者在模型定义里面覆盖该属性,如: protected $connection = 'pgsql';
*/
protected $connection; /**
* 模型关联的数据库表名,默认是 模型名->下划线命名->复数形式,
* 好比如定义了 User 模型,class User extend Model,那么默认的表名是 users。
*
* usage:
* (new xxModel)->setTable('xxx')
* (new xxModel)->getModel()
* 或者在模型定义的时候覆盖该属性,如: protected $table = 'tb_user';
*/
protected $table; /**
* 主键字段,默认为 id,也可以覆盖该属性
*/
protected $primaryKey = 'id'; /**
* 不知道哪里用到,除了该文件的 getter 和 setter
*/
protected $perPage = 15; /**
* 主键是否默认自增长
*/
public $incrementing = true; /**
* 是否由模型去维护时间戳字段,如果我们想手动去维护,可以设置为 false
* usage:
* 默认的时间戳字段是 created_at、updated_at,
* 我们如果想要使用自定义的字段,则要在模型里面覆盖 CREATED_AT、UPDATED_AT 这两个常量(下面有定义)
* 其他:
* 默认使用 mysql 的 datetime 类型,如果需要更改为 10 位整型,可以设置 protected $dateFormat = 'U'; ()
*/
public $timestamps = true; /**
* 我们在给模型对象设置非 public 属性的时候,会通过 setAttributes 方法,保存到该数组中
* usage:
* $user = new User();
* $user->name = 'laravel';
* User 中没有定义 public $name 的时候, $attributes 就会多了 'name' => 'laravel' 的键值对
*/
protected $attributes = []; /**
* 保存模型的原始数据,后续修改模型属性只会修改 $attributes,以便侦测变化
*/
protected $original = []; /**
* 模型的关联数据
*/
protected $relations = []; /**
* 隐藏的属性,我们调用模型的 toArray 方法的时候不会得到该数组中的属性,
* 如果需要也得到隐藏属性,可以通过 withHidden 方法
*/
protected $hidden = []; /**
* 与 hidden 数组作用差不多,共同作用
*/
protected $visible = []; /**
* 其中一个用法,根据现有某几个属性,计算出新属性,并在 模型 toArray 的时候显示
* usage:
* 模型里面定义: protected $appends = ['full_name'];
* public function getFullNameAttribute() { return $this->firstName . ' ' . $this->lastName; }
*/
protected $appends = []; /**
* mass assignment 的时候可以批量设置的属性,目的是防止用户提交我们不想更新的字段
* 注意:
* 和 $guarded 同时使用的时候, $guard 设置的会无效
*/
protected $fillable = []; /**
* 不能批量赋值的属性
*/
protected $guarded = ['*']; /**
* 需要进行时间格式转换的字段
* 应用场景:
* 一般情况我们只定义了 created_at、updated_at,我们还可能会保存用户注册时间这些,register_time,
* 这样我们就可以定义,protected $dates = ['register_time'];
* 好比如:
* 我们定义的 $dateFormat 为 mysql 的 datetime 格式,我们即使把 register_time 设置为 time(),
* 实际保存的其实是 datetime 格式的
*/
protected $dates = []; /**
* created_at、updated_at、$dates数组 进行时间格式转换的时候使用的格式
*/
protected $dateFormat; /**
* 自动格式转换,定义方式: protected $casts = ['info' => 'json'];
* 所有可用格式: int、integer、real、float、double、string、bool、boolean、
* object、array、json、collection、date、datetime
* 应用场景:
* 我们想要保存某些特殊格式到数据库(如json、object),我们可以使用该数组对我们的数据进行自动转换,
* usage:
* $user = User::create([
* 'name' => 'ruby',
* 'info' => ['city' => 'Guangzhou']
* ]);
*
* $query_user = User::find($user['id']);
* dd($query_user->info);
* 这里我们可以看数据库保存的 info 字段,实际上是 json 编码的,并且取出来的是 json 解码后的数据
*/
protected $casts = []; /**
* 需要同步更新 updated_at 的关联,调用 save 方法的时候会更新该数组里面定义的关联的 updated_at 字段
*/
protected $touches = []; /**
* todo 自定义事件,目前还没用过 -_-
*/
protected $observables = []; /**
* 需要预加载的关联
*/
protected $with = []; /**
* The class name to be used in polymorphic relations.
*
* todo 也不知道
*/
protected $morphClass; /**
* 模型是否存在
*/
public $exists = false; /**
* 判断模型是否是当前请求插入的
*/
public $wasRecentlyCreated = false; /**
* 模型属性名是否是下划线形式的
*/
public static $snakeAttributes = true; /**
* 用来建立数据库连接
*
* @var \Illuminate\Database\ConnectionResolverInterface
*/
protected static $resolver; /**
* 用来分发模型事件
*
* @var \Illuminate\Contracts\Events\Dispatcher
*/
protected static $dispatcher; /**
* 模型 new 的时候调用模型的 bootXXX 方法, XXX 是模型名称
*/
protected static $booted = []; /**
* 全局查询条件,需要定义
*
* @see \Illuminate\Database\Eloquent\ScopeInterface
*/
protected static $globalScopes = []; /**
* 批量设置属性的时候是否不需要筛选字段
*/
protected static $unguarded = false; /**
* 缓存 getXXAttribute 的值
*/
protected static $mutatorCache = []; /**
* 多对多关联方法,不知道哪里用了
*/
public static $manyMethods = ['belongsToMany', 'morphToMany', 'morphedByMany']; /**
* 创建时间戳字段名称
*/
const CREATED_AT = 'created_at'; /**
* 更新时间戳字段名称
*/
const UPDATED_AT = 'updated_at';

laravel 5.1 Model 属性详解的更多相关文章

  1. odoo项目结构参数属性详解

    1.基础文件及目录结构 在认识odoo ORM框架前,先介绍一下odoo中模块目录结构.   data:存放模块预制数据i18n:存放国际化文件models:存放模型等py代码security:存放权 ...

  2. <转>ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解

    MVC 3 数据验证 Model Validation 详解  再附加一些比较好的验证详解:(以下均为引用) 1.asp.net mvc3 的数据验证(一) - zhangkai2237 - 博客园 ...

  3. Ext.form.ComboBox常用属性详解

    Ext.form.ComboBox常用属性详解 标签: Extjs js combo js 代码 var combo = new Ext.form.ComboBox({ store : new Ext ...

  4. android:exported 属性详解

    属性详解 标签: android 2015-06-11 17:47 27940人阅读 评论(7) 收藏 举报 分类: Android(95) 项目点滴(25) 昨天在用360扫描应用漏洞时,扫描结果, ...

  5. OutputCache属性详解(一)一Duration、VaryByParam

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  6. OutputCache属性详解(二)一 Location

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  7. OutputCache属性详解(三)— VaryByHeader,VaryByCustom

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  8. OutputCache属性详解(四)— SqlDependency

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  9. WPF依赖属性详解

    WPF依赖属性详解 WPF 依赖属性 英文译为 Dependency Properties,是WPF引入的一种新类型的属性,在WPF中有着极为广泛的应用,在WPF中对于WPF Dependency P ...

随机推荐

  1. 深入理解Java之线程池(爱奇艺面试)

    爱奇艺的面试官问 (1) 线程池是如何关闭的 (2) 如何确定线程池的数量 一.线程池销毁,停止线程池 ThreadPoolExecutor提供了两个方法,用于线程池的关闭,分别是shutdown() ...

  2. Java字节流与字符流

    九.字节流与字符流 9.1 IO的分类 <段落>根据数据的流向分为:输入流和输出流. 输入流 :把数据从其他设备上读取到内存中的流. 输出流 :把数据从内存 中写出到其他设备上的流. 数据 ...

  3. 【刷题】BZOJ 2125 最短路

    Description 给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径. Input 输入的第一行包含三个整数,分别表示N和M和Q 下接M行,每行三个 ...

  4. Mac中把光盘转存为iso文件

    因为Mac是类Unix的,因此,dd命令同样适用于Mac,那么,就很简单了,复习一下dd的用法而已 [xiaosilent@rmbp Volumes]$ drutil status Vendor Pr ...

  5. [Java] I/O底层原理之三:NIO

    本篇文章参考自并发编程网 一.NIO 的概述 NIO 由以下几个核心组成 Channels Buffers Selectors 选择器用于监听多个通道的事件(如:链接打开.数据达到),单个线程可以监听 ...

  6. 带你吃透RTMP

    RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing) ...

  7. bzoj千题计划285:bzoj2555: SubString

    http://www.lydsy.com/JudgeOnline/problem.php?id=2555 后缀自动机,用LCT维护parent树 一个串的出现次数 = parent 树 上 其所在状态 ...

  8. SQL语句(九)使用特殊关系运算符查询

    使用特殊关系运算符查询 特殊关系运算符 IN.NOT IN IS NULL.IS NOT NULL BETWEEN.NOT BETWEEN LIKE.NOT LIKE IN , NOT IN IN 在 ...

  9. django2.0 官方中文文档地址

    django2.0 官方开始发布中文文档了,之前还想着一直翻译完成所有有必要的内容,想着可以省事一些了,打开以后看了一下,发现官方的中文文档还没翻译完成, 现在(2018-7-10)最新章节是是  编 ...

  10. .NET面试题系列(四)计算机硬件知识

    计算机的硬件组成 总线:贯穿整个系统的是一组电子管道(其实就是传输数据的线路),也就是总线.总线传送的是字,字的大小与系统相关,比如在32位操作系统当中, 一个字是4个字节. I/O设备:I/O设备是 ...