使用 Eloquent ORM 使用 with 模型关联查询,如何处理select不同模型的字段(字段名可能相同)

Laravel Eloquent select() 的数据契约本质 在 Laravel 开发中,`select()` 并非简单的 SQL 字段筛选语法,而是声明数据意图的核心机制——它定义模型可访问属性、影响访问器执行、约束关系预加载行为,并决定序列化输出与内存开销。理解其背后与 Eloquent 生命周期、全局作用域、字段白名单及关联外键的深度耦合,是构建高性能、可维护应用的关键。尤其在涉及 `with()` 预加载、`join` 字段注入、`selectRaw` 计算字段等场景时,`select()` 实质上是一份运行时数据契约。掌握它,才能真正驾驭 Laravel 数 阅读详情

遇到一个问题,就是articles和article_comments两个数据模型
现在要查出来某个用户的评论列表(列表包含 评论内容article_comments.content、评论时间article_comments.created_at、评论所属的文章articles.title)。
我首先需要根据article_comments中的user_id查询出来对应的评论列表,然后根据评论列表中的article_id,然后找到对应文章标题。

一. 关联模型(一对多)

  • articles 文章模型
// 核心方法
public function comments()
{
  return $this->hasMany('App\Models\ArticleComment')->orderBy('id', 'desc');
}
  • article_comments 评论模型
// 核心方法
public function article()
{
	return $this->belongsTo('App\Models\Article');
}

二. 获取某个用户的评论列表

// DB操作,主要是想打印一下sql
use Illuminate\Support\Facades\DB;

 public function comments($id)
 {
	 $user = \App\User::find($id);
	 if(empty($user)) {
		 echo '用户不存在';
		 exit;
	 }

	DB::connection()->enableQueryLog(); // 开启查询日志
    
	$commentList = ArticleComment::with(['article'=>function($query){
	     // 采用闭包进行处理,select出来想要的字段,但是必须包含关联外键 id
	     return $query->select('title as article_title', 'id');
	}])
	->where('user_id', $id)
	// 这里select出来评论模型的字段,但是也必须要包含外键 article_id
	->select('content', 'created_at','user_id','id','article_id')
	->orderBy('id','desc')
	->get();

    // 这个地方可以打印sql,挺不错的,记录一下
	foreach (DB::getQueryLog() as $sql) {
	    dump($sql['query']);
	}

	dd($commentList);
	exit;
}

最后注意:如果想要指定字段,使用 select 时,一定要写两个表的关联字段,不然是查不到关联关系的。

Laravel Eloquent 更新的6种方式与选型指南 Eloquent 更新不是简单的 SQL 封装,而是涉及模型状态机、生命周期钩子、脏数据检测和事务安全的复合操作。理解 `save()` 与 `update()` 的本质差异——前者触发事件、校验白名单、执行脏字段检测,后者直连数据库、绕过所有 ORM 层逻辑——是避免数据不一致与安全漏洞的关键。在高并发、批量处理、队列更新等典型场景中,需权衡性能(如 `where()->update()` 耗时仅1.8ms)、一致性(是否需 Observer 响应)、幂等性(`upsert()` 依赖唯一索引)与可审计性 阅读详情

相关推荐

Laravel Eloquent delete 深度解析:从软删除到可审计级联清理

在 Web 应用开发中,数据删除远不止执行一条 DELETE SQL 语句——它涉及数据一致性、业务规则校验、事件驱动、软删除策略与跨系统协同。Eloquent 的 delete 方法本质上是声明式的数据治理契约,而非简单 ORM 封装。其核心原理在于模型生命周期管理:通过 deleting/deleted 事件触发关联清理、缓存失效、审计记录与资源释放;结合 SoftDeletes 实现逻辑删除与状态隔离;依托事务与分块机制平衡性能与安全性。技术价值体现在保障 GDPR 合规、支撑灰度下架、实现 SaaS

401

Eloquent ORM 关联模型 with() 预加载

直接上代码 模型 public function classify() { return $this->hasOne(Classify::class,'id','classify_id'); } public function user() { return $this->hasOne(User::class,'id','user_id'); } 控制器 Article::query()->with(

m0_54009761的博客 267

Laravel Eloquent:使用 with 方法指定返回的列

此外,我们还可以使用select方法来指定要返回的列,以满足特定的需求。在Laravel框架中,Eloquent提供了一个非常方便的方法来加载关联模型数据,即使用with方法。通过使用with方法,我们可以在查询过程中预加载相关联的模型,并且可以选择性地指定要返回的列。但是,有时我们只需要关联模型中的特定列,这时我们可以使用select方法来指定要返回的列。通过传递一个查询构建器实例给闭包函数,我们可以使用该实例上的select方法来指定要返回的列。在上面的代码中,我们使用了闭包函数来指定。

XtAbap的博客 596

对“Eloquent ORM —— 关联关系”的重点笔记

为什么80%的码农都做不了架构师?>>> ...

weixin_33739627的博客 317

kaggle:Digit Recognizer《手写数字识别》你的第一个图像识别竞赛项目

新手,入门,巩固复习,深度学习,图像识别

qq_63591092的博客 3097

深入解析CycloneDDS跨域通信中的XML配置文件优化策略

本文深入解析了CycloneDDS跨域通信中XML配置文件的优化策略,重点介绍了网络接口配置、多播设置、性能调优参数及复杂场景下的配置案例。通过实战技巧和调试方法,帮助开发者在SoC环境中实现高效稳定的跨域通信,提升系统性能。

soda5的博客 688

php orm教程,Laravel Eloquent Orm 使用指南

1、描述1vs1关系例如比如又两张表,一张部门表,一张经理表,一个部门只有一个经理,一个经理也只控制一个部门,就表达了一对一的关系class User extends Eloquent {//一对一public function dept() {return $this->hasOne('Dept'); // this matches the Eloquent model}class Dep...

weixin_39944595的博客 224

Linux USB设备命名规则

有一个USB设备,接到了Linux系统的终端的某个插口上,那么怎么找到这个设备对应设备路径呢?这个USB设备虚拟了多个功能(三个串口和一个网卡), 如何找到对应操作路径呢?

weixin_43132521的博客 1699

Eloquent ORM模型中添加自定义值

我们都知道通过Laravel中数据库查询出来的模型对象都是基于数据库字段,今天给大家展示一个Laravel Eloquent ORM模型特性-附加值不存在于数据表中。 举个简单的栗子,一篇文章(posts表)对应有很多评论(comments表),我们获取文章的同时需要获取评论数量。通常的做法就是根据ORM的关联关系,获取评论数量:$post->comments()->coun...

weixin_30414245的博客 213

OpenCASCADE(OCC)读取 STEP 模型文件并在MFC中显示

OpenCASCADE(OCC)读取 STEP 模型文件并在MFC中显示

weixin_61900468的博客 1万+

labview的TDMS文件读写

本文先介绍TDMS概念和文件结构,然后介绍VI如何使用,最后分析一个labview的自带范例

观则明的博客 1万+

【Laravel Eloquent底层原理】:ORM背后的SQL是如何生成的?

深入解析Laravel Eloquent如何将模型操作转化为SQL,揭秘PHP数据库操作底层机制。涵盖查询构造、关系映射与执行流程,提升开发效率与性能优化能力,值得收藏。

VarChat的博客 758

小程序 video 控制器外观调整_Kessil 360X Tuna Sun无线控制器使用分享

之前分享了Kessil 360X Tuna Sun开箱记录,时间关系,没来得及使用WiFi Dongle无线控制器。昨晚抽空实操了一下,做个操作记录,希望对大家有参考Kessil无线模块操作指南官方视频英文教程配中文字幕,非常详尽语速较快,重点位置可以暂停操作点击边框调出视频工具条1、拆包取控制器,保存二维码Kessil WiFi Dongle包装打开包装就能看到Kessil无线控制模...

weixin_39759060的博客 4734

PHP为什么查不到id,PHP中Laravel 关联查询返回错误id的解决方法

在 Laravel Eloquent 中使用 join 关联查询,如果两张表有名称相同的字段,如 id,那么它的值会默认被后来的同名字段重写,返回不是期望的结果。例如以下关联查询:PHP$priority = Priority::rightJoin('touch', 'priorities.touch_id', '=', 'touch.id')->where('priorities.type...

weixin_42397516的博客 401

YOLO11涨点优化:卷积魔改 | DCNv2升级版本,助力检测

在DCN的基础上,增加了2个创新点,分别是调制模块和使用多个调制后的DCN模块,从形成了DCN的升级版本——DCNv2

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 967

【实战】基于 Inner-IoU 的 YOLOv8 优化指南:显著提升检测精度

Inner-IoU 凭借辅助边框的创新设计,成功解决了传统 IoU 损失在小目标、遮挡场景下的收敛难题,为 YOLOv8 注入了更强的定位能力。从原理剖析到代码集成,本教程已为你铺就了一条“精度提升”的实战路径。现在,不妨亲自上手尝试,让你的目标检测模型在各类数据集上都能交出一份“精度优异”的答卷——相信我,当你看到检测框精准贴合目标的那一刻,你会明白这份尝试的价值。

m0_64661770的博客 107

PHP怎么使用Eloquent Common Table Expressions公用表表达式_Laravel复杂查询分解【技巧】

必须用 DB::select() 或 DB::statement() 执行带 WITH 的原始 SQL如果你确实需要递归层级查询(如组织架构树)、多步中间结果复用(如先算分组统计再排名),又不想写纯 PDO,最稳妥的方式是用 DB::select() 配合绑定参数:CTE 必须写在语句最前面,且紧邻 SELECT(不能有空行或注释隔开)DB::select() 返回数组,不是 Eloquent Collection,无法链式调用 map() 或访问模型属性参数绑定只支持?

242

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

EasyDB与ORM框架对比:何时选择轻量级数据库封装库

在PHP开发中,数据库操作是每个项目的核心需求。面对复杂的数据库交互,开发者通常面临两个主要选择:功能强大的ORM框架或轻量级的数据库封装库。本文将深入对比EasyDB与主流ORM框架,帮助您做出明智的技术选型决策。 ## 什么是EasyDB?轻量级数据库封装的终极解决方案 EasyDB是一个简单易用的PDO封装库,专为PHP项目设计。与传统的PDO相比,EasyDB提供了更简洁、更安全的AP

gitblog_00727的博客 513

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

PHP Eloquent 高级用法揭秘:如何优雅实现软删除、作用域与访问器

掌握PHP Eloquent 用法,轻松实现软删除、全局作用域与访问器。适用于Laravel项目中数据封装与查询优化,提升代码可读性与维护性。详解实际应用场景与核心方法,优雅处理常见业务逻辑,值得收藏。

StepNexus的博客 1021

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Laravel API资源层设计:从Eloquent到生产级契约

API是现代应用的通信契约,其核心在于稳定、可预测与可演进。PHP作为后端主力语言,依托Laravel框架构建API时,必须超越基础路由和JSON返回,深入理解Eloquent模型的数据本质与Resources的转换职责——前者负责数据库交互与业务规则,后者承担领域模型到标准化JSON响应的精确映射。这种分层设计保障了字段一致性、关系加载可控性及敏感数据动态屏蔽能力,显著提升可观测性与前端协作效率。典型应用场景包括微服务间通信、多端(iOS/Android/Web)统一接口、以及需对接AI网关或第三方Saa

weixin_30703911的博客 347

【Laravel 开发效率提升 300%】:掌握 hasManyThrough 多级关联的 5 种高阶模式

掌握Laravel 10的hasManyThrough多级关联,轻松解决跨模型数据查询难题。详解5种高阶模式,涵盖典型应用场景与性能优化技巧,提升开发效率300%。代码清晰可复用,值得收藏。

CompiTide的博客 593

【Laravel 10多级关联终极指南】:深入解析hasManyThrough实现多层关系的5大技巧

掌握Laravel 10 hasManyThrough 多级关联的高效实现方式,解决多层模型关系查询难题。涵盖典型应用场景、核心配置方法与性能优化技巧,助你轻松构建复杂业务逻辑。5大实战技巧深度解析,值得收藏。

SimCompile的博客 373

你真的会用hasManyThrough吗?,深度剖析Laravel 10多对多中间穿透查询陷阱与解决方案

掌握Laravel 10 hasManyThrough多级关联技巧,轻松实现跨表穿透查询。详解适用场景、核心语法与常见陷阱规避方法,提升复杂关系处理效率。合理运用中间模型关联,让数据访问更直观高效,值得收藏。

LogicNest的博客 314
上一篇: 【Swoole】- Centos7中使用Pecl安装PHP7的Swoole扩展
Tacks
博客等级 码龄9年 37粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值