1模型关联知识

  • 花色的数据库部分今儿早上晓乐已经微信录像和作者讲了近三个小时,小叮租书品种的后台使用laravel开发接口和事务逻辑部分,前台部分是由金融大学1人民代表大会二的前端学生在做。那几个连串数据表很多,大体上分为了product,order和一无可取的er-common部分。

  • 类型事关到的实体相比多,前日另二个PHPer把数据表全体migration写完push上去了,担心本身不会明日的API-Model怎么写,晓乐还特意写了Role和Permission部分。然后,笔者也的确不会写,一起首都不精通到底要写吗,等讲完一时辰的多寡表才知道:原来是要自个儿写模型里面实体间的相应关系

  • 4166澳门金沙网娱乐,不能够咯,看官方的英文文档的Eloquent:
    Relationships部分咯。文书档案建议实体之间的涉嫌有多样(各类:一对多和多对一足以掌握为一种):

一对一 
一对多
多对一
多对多
远程一对多
多态关联
多态多对多关联
  • 行使模型关联此前,大家要先定义每一种实体关系的种类。

  • 第②创立3个后续了Eloquent/Model类的User
    Model,依据项目E汉兰达图找出和用户实体有关联的实体:role角色permission权限school学校enrollmentInfo学籍orders订单coupons优惠券addresses地址carts购物车,除了和实业的关联,User
    Model还相应定义一些用来获取id,token新闻的函数。

  • 为啥上边的实业部分是单数一些是复数呢?那正是laravel所谓的预订大于配置。用户和其余实体之间的关系决定了User类中提到函数的单复数格局。比如说用户和订单的涉及,三个用户能够下八个订单,贰个订单之恩那多少个属于多少个用户,所以她们之间是一对多的涉嫌,使用Eloquent内置的hasMany函数注脚相对关联:

public function orders()
{
        return $this->hasMany('App\Entities\Order');
}
  • 那正是说今后的基本点正是多少个:证明相对关联的Eloquent内置函数有如何?请看https://cs.laravel-china.org/\#eloquent
    。千万不要和Laravel内置的赞助函数(帮忙函数,帮手函数,Helpers函数)搞混哦,简单用法如下。

// 一对一 - User::phone()
 return $this->hasOne('App\Phone', 'foreign_key', 'local_key');
// 一对一 - Phone::user(), 定义相对的关联
 return $this->belongsTo('App\User', 'foreign_key', 'other_key');

// 一对多 - Post::comments()
 return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
//  一对多 - Comment::post()
 return $this->belongsTo('App\Post', 'foreign_key', 'other_key');

// 多对多 - User::roles();
 return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');
// 多对多 - Role::users();
 return $this->belongsToMany('App\User');
// 多对多 - Retrieving Intermediate Table Columns
$role->pivot->created_at;
// 多对多 - 中间表字段
 return $this->belongsToMany('App\Role')->withPivot('column1', 'column2');
// 多对多 - 自动维护 created_at 和 updated_at 时间戳
 return $this->belongsToMany('App\Role')->withTimestamps();
  • 那便是说回过头来看看那一个类型中app/
    Entities/目录下那么多个实体Model(Entities正是个目录,改成Model也行,然则Entities翻译过来便是更准确的实体的意味,作者一早先还以为是啥厉害的Composer包呢)。大家看看User.php和上边说的有吗分歧。

4166澳门金沙网娱乐 1

首先

  • 率先命名空间和利用缓存,然后是Eloquent的软删除(也叫softdelete,惰性删除,要和惰性加载load区分一下)。别的的四个是用来证实授权的一对内容,那么些类型的认证授权使用第①方包JWT,有空作者得询问一下。

  • 然后便是User
    Model落成接口AuthenticatableContract和AuthorizableContract(其实本身也不太驾驭那接口在何地定义的,为何要如此写),接着最先定义一些布局,比如:

    1. 表名不是默许的名词+s格局,则须要内定$table。
    2. 倘诺表中不设有created_at和updated_at,供给将timestamp钦定为false,即关闭自动尊敬时间戳。
    3. 遵循气象添加guarded数组,如created_at等。
    4. 若果存在deleted_at,为model添加softdelete
      的trait。(写小说时候这点笔者还不领悟)
      5.对于外键不是【表名单数】_id那样情势的,必要在内定关系时,显性钦赐键名,如address表中的province_id指向areas,就供给独自钦点。
  • 相比较项目User.php和方面包车型地铁函数你会发现hasOne()还能够带参数,也是概念配置内部的双重定义外键,因为私下认可情况下外键名称是依据Model名称的。包蕴第⑤个参数,具体请看:http://d.laravel-china.org/docs/5.1/eloquent-relationships

  • 除开那些文件中海油获取user_id的getAuthIdentifier(),获取user_password的getAuthPassword()和静态的addUser()。

  • 实在那些片段不仅仅写模型关联如此不难,还有获取数据,更新删除数据的法门,Model相关的内容包涵基础用法更多用法软删除模型关联事件Eloquent配置信息

  • 那正是说作者就联络了另2个办事三年的PHPer,问下他写了怎么着实体关系,小编就从头写咯,要写的如下:

Account  账户
Address  地址
Cart  购物车
Category  分类
College  大学
Coupon  优惠券
EnrollmentInfo  学籍信息
EnrollmentUnit  学籍单位
Entity  相当于Eloquent/Model,这里所有实体的父类
Inventory  库存
Item  商品
Major  学生主修专业
Order  订单
OrderAddition  订单辅表
OrderHistory  历史订单
OrderItem  订单商品表
Payment  付款方式
PaymentRecord  付款记录
Permission  权限,william wei写完了。
    - 多对多roles
Product  产品
ProductAttr  产品属性
ProductAttrValue  产品属性值
Role  角色,william wei写完了。
    - 多对多users,多对多permissions
School  学校
Shipping  配送方式
StockOutRecord 出库记录
Tag  标签
User  用户,william wei写完了。
    - 一对多school,一对一EnrollmentInfo,多对多Role,
    - 一对多orders,多对多coupons,一对多addresses,一对多carts
Warehourse  仓库
  • 小心,一对多和多对一概念类似可是函数名单复数不相同哦。学生对母校是一对多,使用school();学校对学员是何其对一,使用students()。

  • 选取belongsTo时或然是至极,也或者是一对多。

  • 上边有少数是实业之间的联络表,考虑到适合增添冗余于是给该表扩大字段作为实体操作,例如:product。

  • 怎么查看本地和长途代码的区分呢,使用git diff命令咯(zsh下暗中同意别用gd),但是供给协调内定参数哦,常见参数有:

git diff test 查看本地当前分支与本地test分支的区别
git diff test 查看本地当前分支与远程test分支的区别
git diff dev master 查看本地dev分支与远程master分支的区别
git diff pull test 查看下次提交到远程dev分支时出变化的内容

本条片段git命令没写好之后继续丰裕,并扩大到从前的Git命令学习小说中。其它下篇小说就是本身独自把上面装有实体关联写完的烧脑进程,对着ER图平素想,贰个XXX能够有YYY个ZZZ,可是叁个ZZZ只好有YYY一律XXX,所以这些N对M模型,然后对照速查表写关联函数。