美文网首页
laravel Eloquent:关联

laravel Eloquent:关联

作者: jacklin1992 | 来源:发表于2017-12-12 15:05 被阅读19次

    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问题。

    相关文章

      网友评论

          本文标题:laravel Eloquent:关联

          本文链接:https://www.haomeiwen.com/subject/dhhpixtx.html