Laravel:关于with用法 OneByOne 关联(避坑)
文章目录
- 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 关联(避坑)相关推荐
- 关于使用JWT我的一些建议及避坑指南(非必须建议别用)
阅读本文的前提是建立在假定你已经熟知jwt和session是什么及相应的工作原理和用法皆有所了解,生产中也有实际的使用. 关于jwt的一些不足之处,可以参考这里:(译)别再使用 JWT 作为 Sess ...
- 新人赛《金融风控贷款违约》避坑指南!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陶旭东,北京师范大学,Datawhale成员 一.背景介绍 本文以 ...
- 完美避坑!记一次Elasticsearch集群迁移架构实战
作者介绍 李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch,对Elastic-Stack开发.架构.运维等方面有深入体验,实践 ...
- python搭建项目结构_Django搭建项目实战与避坑细节详解
Django 开发项目是很快的,有多快?看完本篇文章,你就知道了. 安装 Django 前提条件:已安装 Python. Django 使用 pip 命令直接就可以安装: pip install dj ...
- 避坑!使用 Kubernetes 最易犯的 10 个错误
Kubernetes 作为大规模企业级应用容器编排的首推工具,其为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,本文作者 Marek Bartik 深入分享了 K8s 的避坑 ...
- Mac OSX 下高效安装 homebrew 及完美避坑姿势
Mac OSX 下高效安装 homebrew 及完美避坑姿势 Homebrew 是什么 Homebrew是 mac的包管理器,仅需执行相应的命令,就能下载安装需要的软件包,可以省掉自己去下载.解压.拖 ...
- python避坑_Django搭建项目实战与避坑细节详解
Django 开发项目是很快的,有多快?看完本篇文章,你就知道了. 安装 Django 前提条件:已安装 Python. Django 使用 pip 命令直接就可以安装: pip install dj ...
- 多客技巧分享|【建议收藏】TikTok七大避坑指南帮你少走许多弯路
很多新手朋友在做tiktok时会遇到非常多大问题,而且也非常容易踩坑,今天就给大家讲一下在tiktok运营时要注意的7大避坑指南! 先说说TikTok运营教程如何打造账号 1.网感培养 首先在我们开始 ...
- RPA for Python(tagui)避坑指南 - 以咸鱼之王为例
文章目录 前言 init click 点击函数 snap 截图函数 read ocr函数 结语 前言 这两天测试使用了一下 RPA for Python (以下简称pytagui,本质上就是用的tag ...
- HarmonyOS实战 —基于hi3861芯片鸿蒙2.0的避坑指南
HarmonyOS实战 -基于hi3861芯片鸿蒙2.0的避坑指南 特别说明:本文章与卡片开发无关,想看卡片开发的不用往下读了 最近学习鸿蒙设备开发的过程中遇到了很多问题,因为目前几乎所有设备开发教程 ...
最新文章
- 浅析Struts 体系结构与工作原理(图)
- 二叉树的先序遍历(递归)
- 数据中心供电有多重要,看看这件事就知道了
- 六十四、前缀,后缀,中缀表达式转化求值问题
- 余玄相似度,TF-IDF
- [Swift]LeetCode944. 删除列以使之有序 | Delete Columns to Make Sorted
- python保存文件,如果目录不存在,则创建
- java找不到数据库的表_GreenDao:no such table 找不到表的终极解决方案!
- [ubuntu 16.04]如何在新建的Anaconda环境中打开jupyter notebook
- iOS - Analyze 静态分析
- 内网穿透Natapp
- 收藏 | 史上最详细的 Landsat 1-9 系列数据集介绍~
- AlphaGo Zero 初探
- 超市总营业额分析程序
- vue解决打包后文件过大的问题-使用压缩插件打包后压缩文件-compression-webpack-plugin
- sersync实时同步 解决单点NFS单点故障问题
- 利用硬件机器人实现网络试衣
- Dash中文文档: Lodash
- 主流的6个Go语言Web框架
- 名词性从句(1)——同位语从句(1)
热门文章
- python如何调整图片大小_Python实现图片尺寸缩放脚本
- 微信小程序调用域名服务器的服务
- php生成五星红旗,php基于GD库画五星红旗的方法_PHP
- 计算机访问网络延迟越低越好吗,内存延迟参数是否越低越好
- go-micro服务报错:wsasend: An existing connection was forcibly closed by the remote host
- oracle提高like速度,sql语句提升like效率
- 如何在java中实现小数点自增_java保留小数的四种实现方法
- 使用面包板的一点小注意
- Ubuntu 切换中文目录为英文目录
- a4的尺寸大小转换为像素