文章目录

  • with
    • 避坑1:假如我使用了关联表 activity 的数据。
    • 避坑2:假如我加上了,外键 activity_id 字段
    • 用法1:我现在都加上了
    • 用法2:正常用法,不指定字段

with

Laravel 提供当两个表有关联关系时,在Model层建立关系后,在使用过程总,用 with 把关联关系的数据获取出来。

避坑1:假如我使用了关联表 activity 的数据。

Complaint::filter($params)->with(['activity' => function($query) {return $query->select(['title']);}])->select(['id', 'pay_order_number', 'user_name', 'handle_type', 'created_at'])->get();

结果:没有获取到 关联数据 activity,返回null。
原因:指定select方法字段没有包含作为外键的关联with,意思是你要拉取 activity 相关数据,同时需要把 activity_id 字段获取出来,否则就不要指定字段。

避坑2:假如我加上了,外键 activity_id 字段

Complaint::filter($params)->with(['activity' => function($query) {return $query->select(['title']);}])->select(['id', 'activity_id', 'pay_order_number', 'user_name', 'handle_type', 'created_at'])->get();

结果:仍然返回null,你关联上了,怎么还返回null,假如你关联了数据也指定了获取字段。
原因:关联数据指定字段的话,需要把关联数据中的主键id也要加上。

用法1:我现在都加上了

Complaint::filter($params)->with(['activity' => function($query) {return $query->select(['id', 'title']);}])->select(['id', 'activity_id', 'pay_order_number', 'user_name', 'handle_type', 'created_at'])->get();
  • with: activity 指定字段,加上主键后,再加上其他需求字段。
  • 主SQL:select 指定字段,加上activity_id
  • bingo:获取成功,拉取到activity 相关联数据,且activity 获取指定的字段。

用法2:正常用法,不指定字段

Complaint::filter($params)->with(['activity', 'xxx', 'yyy'])->select(['id', 'activity_id', 'pay_order_number', 'user_name', 'handle_type', 'created_at'])->get();
  • with 使用一维数组时,可以指定多个关联,去掉数组时,允许指定单个关联。
  • with 使用关联数组时,以 key 为关联头,以value为关联体。
//无欲无求式,指定查询字段
->with(
['activity' => function($query) {//你可以在这里使用你要对关联体的查询return $query->select(['id', 'title']);}]
//这么搞,指定参数
->with(
['activity' => function($query) use ($params){//也可以指定查询参数,作为关联体的查询return $query->select(['id', 'title']);}]//多搞
->with(
['activity' => function($query) use ($params){//也可以指定查询参数,作为关联体的查询return $query->select(['id', 'title']);},'user' => function($query) use ($params){return $query->select(['id', 'user_name']);}
]

遇到使用 with 的坑,就是在这里。
由于目前还没有看源码是如何实现的,只能讲到使用到哪里。

Laravel:关于with用法 OneByOne 关联(避坑)相关推荐

  1. 关于使用JWT我的一些建议及避坑指南(非必须建议别用)

    阅读本文的前提是建立在假定你已经熟知jwt和session是什么及相应的工作原理和用法皆有所了解,生产中也有实际的使用. 关于jwt的一些不足之处,可以参考这里:(译)别再使用 JWT 作为 Sess ...

  2. 新人赛《金融风控贷款违约》避坑指南!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陶旭东,北京师范大学,Datawhale成员 一.背景介绍 本文以 ...

  3. 完美避坑!记一次Elasticsearch集群迁移架构实战

    作者介绍 李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch,对Elastic-Stack开发.架构.运维等方面有深入体验,实践 ...

  4. python搭建项目结构_Django搭建项目实战与避坑细节详解

    Django 开发项目是很快的,有多快?看完本篇文章,你就知道了. 安装 Django 前提条件:已安装 Python. Django 使用 pip 命令直接就可以安装: pip install dj ...

  5. 避坑!使用 Kubernetes 最易犯的 10 个错误

    Kubernetes 作为大规模企业级应用容器编排的首推工具,其为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,本文作者 Marek Bartik 深入分享了 K8s 的避坑 ...

  6. Mac OSX 下高效安装 homebrew 及完美避坑姿势

    Mac OSX 下高效安装 homebrew 及完美避坑姿势 Homebrew 是什么 Homebrew是 mac的包管理器,仅需执行相应的命令,就能下载安装需要的软件包,可以省掉自己去下载.解压.拖 ...

  7. python避坑_Django搭建项目实战与避坑细节详解

    Django 开发项目是很快的,有多快?看完本篇文章,你就知道了. 安装 Django 前提条件:已安装 Python. Django 使用 pip 命令直接就可以安装: pip install dj ...

  8. 多客技巧分享|【建议收藏】TikTok七大避坑指南帮你少走许多弯路

    很多新手朋友在做tiktok时会遇到非常多大问题,而且也非常容易踩坑,今天就给大家讲一下在tiktok运营时要注意的7大避坑指南! 先说说TikTok运营教程如何打造账号 1.网感培养 首先在我们开始 ...

  9. RPA for Python(tagui)避坑指南 - 以咸鱼之王为例

    文章目录 前言 init click 点击函数 snap 截图函数 read ocr函数 结语 前言 这两天测试使用了一下 RPA for Python (以下简称pytagui,本质上就是用的tag ...

  10. HarmonyOS实战 —基于hi3861芯片鸿蒙2.0的避坑指南

    HarmonyOS实战 -基于hi3861芯片鸿蒙2.0的避坑指南 特别说明:本文章与卡片开发无关,想看卡片开发的不用往下读了 最近学习鸿蒙设备开发的过程中遇到了很多问题,因为目前几乎所有设备开发教程 ...

最新文章

  1. 浅析Struts 体系结构与工作原理(图)
  2. 二叉树的先序遍历(递归)
  3. 数据中心供电有多重要,看看这件事就知道了
  4. 六十四、前缀,后缀,中缀表达式转化求值问题
  5. 余玄相似度,TF-IDF
  6. [Swift]LeetCode944. 删除列以使之有序 | Delete Columns to Make Sorted
  7. python保存文件,如果目录不存在,则创建
  8. java找不到数据库的表_GreenDao:no such table 找不到表的终极解决方案!
  9. [ubuntu 16.04]如何在新建的Anaconda环境中打开jupyter notebook
  10. iOS - Analyze 静态分析
  11. 内网穿透Natapp
  12. 收藏 | 史上最详细的 Landsat 1-9 系列数据集介绍~
  13. AlphaGo Zero 初探
  14. 超市总营业额分析程序
  15. vue解决打包后文件过大的问题-使用压缩插件打包后压缩文件-compression-webpack-plugin
  16. sersync实时同步 解决单点NFS单点故障问题
  17. 利用硬件机器人实现网络试衣
  18. Dash中文文档: Lodash
  19. 主流的6个Go语言Web框架
  20. 名词性从句(1)——同位语从句(1)

热门文章

  1. python如何调整图片大小_Python实现图片尺寸缩放脚本
  2. 微信小程序调用域名服务器的服务
  3. php生成五星红旗,php基于GD库画五星红旗的方法_PHP
  4. 计算机访问网络延迟越低越好吗,内存延迟参数是否越低越好
  5. go-micro服务报错:wsasend: An existing connection was forcibly closed by the remote host
  6. oracle提高like速度,sql语句提升like效率
  7. 如何在java中实现小数点自增_java保留小数的四种实现方法
  8. 使用面包板的一点小注意
  9. Ubuntu 切换中文目录为英文目录
  10. a4的尺寸大小转换为像素