laravel Eloquent:关联

laravel 官方文档这一页很长,讲了很多东西,大概分为四个部分, 关联,关联查询,预加载,操作关联模型,更新时间戳, 前面三个比较常用,第四个没看懂,他讲了怎样添加关联和更新关联,这还是能理解的,但是又说道解除关联关系,懵逼,为什么要解除?如果你懂,请下面留言,很感谢。下面我大概总结一下前面三个,常用的,关联,关联查询,预加载。

定义关联

它介绍了很多种情况,一对一,一对多,多对多,远层一对多,多态,多对多多态,听上去很懵逼,其实结合场景,很容易理解。
一对一 :用户 对 用户的个人信息
一对多: 文章 对 文章的评论
多对多 : 关联表 比如一个权限管理 权限表 用户表 用户权限表
远层一对多: 中国 对 省 对 市 这里的 中国 和市 就是他说的远层
多态: 文章有评论, 视频有评论, 所有的评论都在评论表 通过id关联, 这就是多态
多对多多态: 没有耐心看下去

逻辑就是这样的,还有就是反向关联,其实是一个道理,这里需要注意的是,每种关联的参数,还有反向关联的参数,如果你觉得不好记住位置,要先理解has 和 belong,和外键, 你在写代码的时候 编辑器会提示你这个位置要写什么,A有B, 通过一个键连接,这个外键就是A的id, A属于B,通过一个外键连接 那这个外键就是B的id。

关联查询

    $posts = Post::whereHas('comments', function ($query) {
        $query->where('content', 'like', 'foo%');
    })->get();

如上面的代码,在post中,肯定有个 comments 为方法名的关联存在,这行代码翻译成人话就是, 我要查询Post, 什么样的呢,就是用我事先定义好的comments关联查关联数据,查出来的数据不是空的, 然后在这个基础上,再加上乱七八糟的条件。

预加载

场景: 比如 每个合同有很多账单 你定义了一个关联,contract hasMany bill

image.png

语句打印出的语句如下


image.png

但是,假如这么写


image.png

语句是下面这样
image.png

这就是预加载,还有所谓的n+1问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Eloquent: 关联模型 简介 数据库中的表经常性的关联其它的表。比如,一个博客文章可以有很多的评论,或者一个...
    Dearmadman阅读 17,371评论 6 16
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,049评论 25 709
  • laravel 中的Eloquent 极大的简化了我们的代码,使用起来极其方便,一个方法就能搞定很多东西! 1,一...
    小小小胡阅读 422评论 0 0
  • 希望你所有梦想都成真,即便是那些曾被人嘲笑的梦想。
    艾娃手绘阅读 304评论 0 0
  • 回头想想,我们应该都曾经试图坚持过一件事情。 刚入大学,在篮球场上,你看到女同学在场下给你加油打气,于是你觉得如果...
    hessle阅读 337评论 0 0