• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    laravel ORM关联关系中的 with和whereHas用法

    with 渴求式预加载 可以有效的避免 N+1 问题,用法如下:

    $books = App\Book::with('author')->get();

    如果有多个关联关系可以用“,”隔开,还可以使用闭包来对关联关系进行限制,向下面这样:

    //查询所有的用户,查询条件:发布过标题中有first的post 
    $users = User::with(['posts' => function ($query) {
      $query->where('title', 'like', '%first%');
    }])->get();

    结果会查找所有的用户,返回的每个用户信息中都会多一个posts数组,但是posts数组可能为空(不符合查询要求),没有筛选功能

    with 更像 sql 中的 join,就是你存不存都有执行,存在结果不为空,存在关联结果,不存在结果为空,关联结果为空

    whereHas 查询存在的关联关系,还有对应的 whereDoesntHave ,查询不存在的关联关系,像下面这样:

    // 获取发布文章标题中有first的用户
    $users= User::whereHas('posts', function ($query) {
      $query->where('title', 'like', '%first%');
    })->get();

    结果会查找发布过文章标题包含first的部分用户,有筛选功能

    whereHas 就是在关联关系上筛选,只筛选符合条件的,适合查找 存在不存在

    感觉 with 更多的用在查看详情的时候,你想知道你的查看对象的具体信息,关联到的内容是怎样的,

    而 whereHas 更多的用在筛选,你要把符合条件的关联关系的对象给他找出来。

    就像用户发文章, user 存在关联关系 post,如果是 user->with('post'),你会得到所有用户和用户发布的文章信息,没发文章的用户就没有文章信息,如果是 user->whereHas('post'), 那拿到的可就是发过文章的用户。

    这就是我对 with 和 whereHas 的一些理解了

    以上这篇laravel ORM关联关系中的 with和whereHas用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • laravel 模型查询按照whereIn排序的示例
    • 在laravel中使用with实现动态添加where条件
    • laravel 输出最后执行sql 附:whereIn的使用方法
    • 基于laravel where的高级使用方法
    • Laravel中的where高级使用方法实例讲解
    上一篇:浅谈Laravel模板实体转义带来的坑
    下一篇:解决laravel5.4下的group by报错的问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    laravel ORM关联关系中的 with和whereHas用法 laravel,ORM,关联,关系,中的,