首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel Eloquent,如何用where访问3个表上的eloquent?

Laravel Eloquent 是 Laravel 框架提供的一种简洁、优雅的数据库查询与操作方式。通过 Eloquent,我们可以使用面向对象的方式进行数据库操作,而无需编写复杂的 SQL 语句。

在 Laravel Eloquent 中,我们可以使用 where 方法来进行查询条件的设置。针对需要访问3个表的情况,可以使用 Eloquent 的关联模型功能来实现。

首先,确保在 Eloquent 模型类中定义了相关的关联关系。假设我们有三个模型类:User、Post 和 Comment,分别对应用户、文章和评论三个表。其中,用户和文章是一对多关系,文章和评论也是一对多关系。

  1. 在 User 模型类中,定义与 Post 的一对多关系:
代码语言:txt
复制
namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public function posts()
    {
        return $this->hasMany('App\Post');
    }
}
  1. 在 Post 模型类中,定义与 Comment 的一对多关系:
代码语言:txt
复制
namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function comments()
    {
        return $this->hasMany('App\Comment');
    }
}
  1. 在 Comment 模型类中,定义与 Post 的多对一关系:
代码语言:txt
复制
namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

接下来,我们可以使用 Eloquent 提供的关联查询方法来访问这三个表。假设我们要查询所有评论内容为 "example" 的用户信息,可以按照以下步骤进行操作:

代码语言:txt
复制
$users = User::whereHas('posts.comments', function ($query) {
    $query->where('content', 'example');
})->get();

上述代码中,使用了 whereHas 方法来筛选出存在满足条件的相关关联模型的用户。其中,posts 是 User 模型中定义的与 Post 的一对多关系方法,comments 是 Post 模型中定义的与 Comment 的一对多关系方法。通过在闭包函数中设置查询条件,我们可以对评论的内容进行筛选。

以上就是使用 Laravel Eloquent 的 where 方法访问3个表的简要示例。根据实际业务需求,你还可以进一步拓展和优化查询,包括使用关联约束、指定查询字段等。详细的 Eloquent 查询操作请参考 Laravel 官方文档中的 Eloquent ORM 部分:

Laravel Eloquent ORM 文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Laravel Eloquent ORM 实现查询中指定字段

在使用Laravel ORMModel方法find, get, first方法获取数据对象时返回数据对象attributes属性数组里会包含数据中所有的字段对应键值关系, 那么如何在ORM查询时只返回数据中指定字段数据呢...很多时候,文档没有写明用法需要我们去看源码来探究,下面我们就来看一下这三个方法实现。...) { if (is_array($id)) { return $this- findMany($id, $columns); } $this- query- where($this...(['column1', 'column2']); $data = ModelA::where(['column1', '=', 'value'])- get(['column1', 'column2...以上这篇Laravel Eloquent ORM 实现查询中指定字段就是小编分享给大家全部内容了,希望能给大家一个参考。

3.1K21

Laravel Eloquent方法并使用模型关联实现

众所周知 Laravel 是 PHP 开发项目最优美的框架之一,尤其是 Eloquent 对数据库操作提供了特别多便利。...在实际开发中我们经常涉及到分库分场景,那么怎样才能继续配合 Eloquent 优雅使用 Model 模型呢,接下来给大家分享下我在实际开发中所遇到问题。...2、建好后开始创建 model 模型,按照惯例所有的模型都将写在 App\Models 下;首先我们先创建一个类名为 Model 模型并继承 Illuminate\Database\Eloquent...Model 而不是继承 Illuminate\Database\Eloquent\Model,获取某本书章节 controller <?...)- where('book_id', $bookId)- get(); } } 3、好了,我们章节模型已经完成了。

2.2K42

laravel 模型Eloquent ORM 查询

up前面玩了 DB 查询,但是laravel开发基本不怎么使用db方式查询,应该有更强大 模型 Model 介绍 Laravel Eloquent ORM 提供了一个漂亮、简洁 ActiveRecord...laravel Model 使用先进 Eloquent ORM 但也有优缺点 优点是数据库操作变简单安全 缺点也明显数据库操作变缓慢笨重 Eloquent ORM 作为 laravel 中亮点...使用是单数形式帕斯卡命名法 ,也就是首字母大写驼峰命名法 比如 up之前创建 test Model 命名就是 Test.php 但是呢, laravel 都能 用命令创建控制器生成跟数据填充了...」数据库 两种方式解决 第一种Eloquent中自定义$table,缺点:如果是重构项目,名每个Eloquent都要重新定义可就有的哭了 ``` protected $table =...// } 以后模型不要直接由 Eloquent 派生,改为由 BaseModel 派生,就不用特殊指定名,名与模型名称直接一致,也不再驼峰呀什么了。

4.4K10

laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析

本文实例讲述了laravel框架数据库操作、查询构建器、Eloquent ORM操作。...3.1、得到结果集 lavarel查询返回结果集合是StdClass,可以通过$res- name类似访问对象属性方式访问返回值。...Laravel内置Eloquent ORM提供了一种便捷方式帮助你组织数据库数据,每张数据都对应一个与该进行交互模型(Model),通过Model类,你可以对数据进行查询、插入、更新、删除等操作...Eloquent ORM本质是查询构建器,因此上面查询构建器所使用方法Eloquent都可以使用。...Eloquent默认会管理数据创建时间、更新时间,对应数据created_at、updated_at字段,你需要在创建时包含这两个字段。

13.3K51

Laravel代码简洁之道和性能优化

经过一番调研之后发现了一个堪称神器扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...IGNORE 支持 先简单说明一下业务场景: 首先结构设计是:互相喜欢和添加联系人都是双向关系,即入库A B,B A这样成对双向数据 触发互相喜欢,插入2条双向数据,插入之前校验是否存在,存在不重复添加...作为使用复合键和原始表达式示例,请考虑以下表,该计算每个帖子和每天访问者: Schema :: create ( 'stats' , function ( Blueprint $ table )...>主要([ 'post_id','date' ]); }); 使用upsert()登录访问。...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据库时间是int类型,不是laravel默认时间格式,并且我们插入时间和更新时间也不是laravel默认字段

5.7K20

PHP-web框架Laravel-Eloquent ORM(一)

Laravel是一种基于PHP语言Web开发框架,其中Eloquent ORM功能为开发者提供了便捷对象关系映射(ORM)功能,可用于对数据库进行CRUD操作,同时也可以轻松地定义模型关联和查询。...下一、模型定义Eloquent ORM是Laravel框架中一个基于Active Record模式ORM,通过模型与数据库进行映射,实现数据增删改查操作。...在Laravel框架中,每一个Eloquent ORM模型都对应着一个数据库,通过继承Illuminate\Database\Eloquent\Model类来定义模型。下面是一个示例:<?...$table = 'users';}上述代码中,定义了一个User模型,并指定了该模型对应数据库为users。...二、增删改查操作Laravel框架中Eloquent ORM提供了一系列方便CRUD操作方法,如下:查询数据查询单个模型:$user = User::find($id);查询多个模型:$users

86351

orm 系列 之 Eloquent演化历程2

本文最后讲下Eloquent中新增对象之间关系:多态关系,以下内容摘自[ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系 结构 多态关联允许一个模型在单个关联下属于多个不同模型...comments commentable_id 和 commentable_type。...Manager,记得网上搜索过关键字Using Eloquent outside Laravel,我们可以看到一篇Vivek Kumar Bansal写文章,文章从2方面介绍了怎么使用Eloquent...总结 从v4.0.0开始,基本Eloquent就已经固定了,到目前最新master分支,目录结构也没有什么变化了,因此下一篇开始,我们会在最新版基础,分析下Eloquent一些具体实现,尽情期待...参考 [ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系

2.4K30

Laravel Eloquent 模型关联关系(下)

另外,如果访问是模型实例 author() 方法时,返回不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础通过方法链方式构建查询构建器进行更加复杂查询,我们以一个一对多查询为例...: 其中包含了 comments_count 字段,通过这个字段就可以访问该文章评论数。...,在后面访问时候不会再对数据库进行查询。...返回数据格式如下: 此外,渴求式加载还支持嵌套查询,比如我们想要访问文章作者扩展信息,可以这么做: $post = Post::with('author.profile')->findOrFail...空对象模型 如果外键字段 user_id 允许为空的话,当我们访问 Post 模型 author 属性时,默认返回为 null。

19.5K30

通过 Laravel Eloquent 模型实现简单增删改查操作

「ActiveRecord」是 ORM 一种实现模式,Eloquent 则是 Laravel「ActiveRecord」。...一个 Eloquent 模型类映射一张数据,通过模型类提供方法,你可以获取其映射数据所有记录,也可以获取单条记录,还可以创建、更新和删除对应数据表记录,而这一切都不需要你编写任何 SQL 语句...实际Eloquent 模型类底层查询也是基于查询构建器来实现,你可以在模型类上调用所有查询构建器 Where 查询方法,同样是以流接口模式构建方法链调用即可。...你可以直接通过 $user->name 这样方式访问模型类实例属性。...,并将查询条件作为对应字段值设置到模型属性

8K20

PHP-web框架Laravel-Eloquent ORM(三)

四、查询构建器Laravel框架中Eloquent ORM提供了方便查询构建器,用于构建复杂查询语句。下面是一些常用查询构建器方法。...where方法where方法用于添加条件查询,例如:$users = User::where('age', '>', 18)->get();上述代码中,查询了年龄大于18岁所有用户。...总结通过上述文档和示例,我们可以看出Laravel框架中Eloquent ORM提供了便捷对象关系映射功能,可以大大简化开发者数据库操作。...在使用Eloquent ORM进行开发时,需要注意以下几点:模型类名默认对应名是模型类名复数形式,User模型对应名是users,如果需要指定名可以通过定义$table属性来实现。...Eloquent ORM提供了大量方法来操作数据,包括增删改查等,具体可以参考官方文档。

1.5K41

Laravel5.7 Eloquent ORM快速入门详解

简介 Laravel 内置 Eloquent ORM 提供了一个美观、简单与数据库打交道 ActiveRecord 实现,每张数据都对应一个与该进行交互模型(Model),通过模型类,你可以对数据进行查询...Eloquent 我们 Flight 模型使用哪张,默认规则是小写模型类名复数格式作为与其对应名(除非在模型类中明确指定了其它名称)。...时间戳 默认情况下,Eloquent 期望 created_at 和 updated_at 已经存在于数据中,如果你不想要这些 Laravel 自动管理数据列,在模型类中设置 $timestamps...将 Eloquent 模型看作功能强大查询构建器,你可以使用它来流畅查询与其关联数据。例如: <?...::where('active', 1) - orderBy('name', 'desc') - take(10) - get(); 注:由于 Eloquent 模型本质就是查询构建器

15K41

Laravel源码解析之Model

前言 祝猿人们国庆快乐,吃好、喝好、玩好,我会在电视看着你们。 根据单一责任开发原则来讲,在laravel开发过程中每个都应建立一个model对外服务和调用。...protected $table = 'users'; } 解析 Laravel数据操作分两种 – DB facade – Eloquent ORM 它们除了有各自特色外,基本数据操作都是通过...站或者官方文档都没有体现,所以说就算要精通一款框架,不去看它源码也是不行。...Database\Query 类,开头我们讲过这个类了,这里就不多说了,随后就是各种sql拼接->执行sql->结束战斗 Eloquent ORM Eloquent ORM 与DB facade 类似...,首先每个 Eloquent ORM 都需要继承父类 Illuminate\Database\Eloquent\Model 你大概会这样写 User::find(1) 父类是不存在这个方法,它会通过

1.1K30

Laravel学习记录--Model

,'uid','pubtime']; 数据库添加 Model::create(['表字段名'=>'值','字段名'=>'值']) 简单查询 详情访问laravel查询构造器 $model->where...定义方法 在约束方法前加scope public function scopeFlag($query){ return $query->where('flag',1); //状态为书...,Eloquent提供了一些方法和这张进行交互,Stus关联了Mclass对象,在获取这些关联对象后,可以通过模型pivot属性访问中间数据 public function show(){...Laravel中允许你自定义中间模型,需要注意是中间模型与普通模型不一样 普通模型继承自Illuminate\Database\Eloquent\Model,而中间模型继承自Illuminate...为null,前提是uid字段允许为空,如果不允许为空会抛出异常 空对象模型 如果外键字段uid允许为空,当我们访问Phone模型muser属性(注意这里是属性,而不是方法)时,默认返回null,Eloquent

13.5K20

Laravel 模型关联基础教程详解

如果你不完全理解 Laravel 关联在这一点是如何工作,别担心,读完这篇文章后,你会更好地理解它。 我们应该使用哪个模型关联? 要回答这个问题,首先你要知道有哪些可用选项。...你可以通过创建迁移文件在 Laravel 中创建此中间。 远程关联 远程一对一 has one through 关联通过单个中间关联模型实现。...如果每个供应商都有一个用户,并且每个用户与一个用户历史记录相关联,那么供应商可以通过用户访问用户历史记录。...不包含 supplier_id 列,供应商也可以通过使用 「has one through」 关系访问 product_history 记录。...在 User 模型每个实例,我们都可以得到对应 Passport 和 Invoice。 <?

5.5K31

Laravel5.2之模型关联预加载

说明:本文主要说明Laravel Eloquent延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查询次数。同时,会将开发过程中一些截图和代码黏上去,提高阅读效率。...备注:现在有4张:商家merchants、商家电话phones、商家拥有的店铺shops和店铺里商品products。...、包含店铺商家信息姓名和电话、包含拥有的商品信息介绍和价格。...预加载查询 (1)嵌套预加载 Eloquent在通过属性访问关联数据时是延迟加载,就是只有该关联数据只有在通过属性访问它时才会被加载。在查找上层模型时可以通过预加载关联数据,避免N+1问题。...把原来N+1这种query改造成了where..in..这种query,效率提高不少。可以用EXPLAIN来查看SQL语句执行计划。

2.5K41

Laravel框架源码解析之模型Model原理与用法解析

本文实例讲述了Laravel框架源码解析之模型Model原理与用法。分享给大家供大家参考,具体如下: 前言 提前预祝猿人们国庆快乐,吃好、喝好、玩好,我会在电视看着你们。...根据单一责任开发原则来讲,在laravel开发过程中每个都应建立一个model对外服务和调用。...$table = 'users'; } 解析 Laravel数据操作分两种 DB facade Eloquent ORM 它们除了有各自特色外,基本数据操作都是通过 Illuminate\Database...站或者官方文档都没有体现,所以说就算要精通一款框架,不去看它源码也是不行。...《php常见数据库操作技巧汇总》 希望本文所述对大家基于Laravel框架PHP程序设计有所帮助。

1.8K30

Laravel 6.11 版本发布,优化了 Redis 多频道广播逻辑

Laravel 官方开发组本周发布了 Laravel 6.11.0 版本,新版本在 Eloquent 模型查询时新增 firstWhere 方法,优化了基于 Redis 多频道广播,以及一些现有版本问题修复...1、新增功能 Eloquent firstWhere() 方法 Eloquent 模型现在支持调用 firstWhere 方法,它功效和 where()->first() 一样,算是一个语法糖: /...'); 需要注意是这个方法仅仅在 Eloquent 模型查询中可用,在数据库查询构建器中不可用。...优化 Redis 多频道广播 在 Laravel 应用中,一次发送事件到多个频道很常见,目前,我们做法是通过多个发布命令发送完全一样负载数据到指定 Redis 服务器,这将导致不必要数据传输,从而带来通信及性能损耗...:makeFaker() 中未定义属性 修复 Str::afterLast() 方法 修复 PHP 7.3 插入浮点类型到 MySQL 数据库问题 修复通过自定义中间属性名刷新模型问题 代码调整 在

1.4K10

需要掌握 Laravel Eloquent 搜索技术

本文同步至个人博客 需要掌握 Laravel Eloquent 搜索技术 ,转载请注明出处。 当我们应用程序访问较少时(例如在项目初期阶段),直接进行项目编码就可以解决大多数问题。...本文将带领大家学习 MySQL 和 Eloquent 在搜索模块中设计相关技术。 基本 Eloquent Where 查询 作为首个要讲解搜索功能,我们先不涉及新知识点。...即实现 MySQL LIKE 查询。Eloquent 提供了比 where 语句更加灵活模糊查询功能。通过在 where 方法中使用通配符,可以实现模糊查询功能。让我们看看 % 通配符: <?...foo 文章 $result = Post::where('title', 'like', '%{$keyword}%')->get(); 我们可以看到 Eloquent 模糊查询功能十分灵活。...我们可以在 Laravel 里使用 where 语句,可以使用原生 SQL 语句,甚至可以使用模糊查询和相似查询,所有这些查询功能都是 Laravel 内置提供开箱即用,非常赞!

3.5K10

3分钟短文:Laravel 从软删除说到模型作用域概念

引言 一节我们讲了通过模型方法新建条目,或者更新数据。对于写操作还有更为重要一个方法, 就是数据删除。删除数据,有物理删除和软删除区别。 ?...我们从软删除使用,再顺便说一说模型内作用域概念。 代码时间 常规删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型方法, 则返回是一个模型对象。...数据库内记录直接移除了,这在重要, 比如user,order,payment这些关系用户权限,资金支付等等重要数据资源,物理删除是不被允许。...所以引入了软删除概念,就是在内添加一个字段,用于标记,这一行条目是否算是删除状态。在laravel中, 这个软删除字段默认是 deleted_at。你也可以在模型中手动指定。...,许多表结构,或者模型设计逻辑, 都兼容了此用法,那么独立成一个Scope类更为实用。

1.3K30
领券