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

Laravel Eloquent 模型关联关系(下)

,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身获取,总共需要进行 N + 1 次查询,而 PHP 对数据库连接是短连接,每次都要重新连接数据库,所以从性能角度考虑不建议使用这种方式...另外,如果访问是模型实例 author() 方法时,返回不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础通过方法链方式构建查询构建器进行更加复杂查询,我们以一个一对多查询为例...whereHas/orWhereHas 方法基于闭包函数定义查询条件,比如我们想要过滤发布文章标题中包含「Laravel学院」所有用户: $users = User::whereHas('posts...: 如果你想进一步过滤出文章标题和评论都包含「Laravel学院」用户,可以在上述闭包函数中通过查询构建器进一步指定: $users = User::whereHas('posts', function...此外,你还可以通过数组传递多个关联关系一次统计多个字段,还可以通过闭包函数指定对应统计过滤条件: $post = Post::withCount(['tags', 'comments' => function

19.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

Laravel学习记录--Model

middleTable:连接两张中间 如不指定,默认拼接规则为stu_mclass(这里没有复数形式) foreignPivotKey:当前模型在中间字段(当前模型类外键) 如不指定,默认拼接规则为...Laravel中允许你自定义中间模型,需要注意是中间模型与普通模型不一样 普通模型继承自Illuminate\Database\Eloquent\Model,而中间模型继承自Illuminate...这得借助于中间,通过前面的学习我们可能会有这样疑惑,不是多对多才借助中间吗?。。。。不急下面通过一个例子你就理解了 ,这里得补充一句,虽然借助了中间,但本质还是一对多关联。...通过用户(users)这个中间,可以使国家与文章建立连接,因为用户分别与国家与文章建立了连接,即可通过用户(users)这个媒介,可使国家与文章建立连接 完成这个案例,我们先根据需求建...,多对多这个大家知道,因此我们需要建立文章与标签,以及中间,中间存放文章与标签id使他们建立连接,这是常规套路,但如果我们系统大一点,不止文章,还有视频,音频,图片等内容,这些东西也会使用标签

13.4K20

为什么 Laravel 这么优秀?

Laravel 目录结构可能对第一次接触的人来说会很繁琐,它有十来个文件夹,但其实大部分文件夹位置都是精心设计,都待在应该待位置。...因为我们已经完成了数据中字段定义、关系、以及最重要一步:如何将数据及数据之间关系写入数据库中,下面简单来介绍下在 Laravel 是如何完成。...可能有多个 Course。...tap 辅助函数Laravel 另一个优秀地方是为我们提供了超级多辅助函数;有操作数组 Arr,操作字符串 Str,操作集合 Collection,操作时间 Carbon 等。...Symfony 完全是另一个可以和 Laravel 媲美的框架,甚至在很多设计Laravel 还要超前;并且 Laravel 核心组件如路由/Request/Container 都是构建在 Symfony

14810

Excel公式技巧17: 使用VLOOKUP函数多个工作中查找相匹配值(2)

我们给出了基于在多个工作给定列中匹配单个条件来返回值解决方案。本文使用与之相同示例,但是将匹配多个条件,并提供两个解决方案:一个是使用辅助列,另一个不使用辅助列。 下面是3个示例工作: ?...图3:工作Sheet3 示例要求从这3个工作中从左至右查找,返回Colour列中为“Red”且“Year”列为“2012”对应Amount列中值,如下图4所示第7行和第11行。 ?...图4:主工作Master 解决方案1:使用辅助列 可以适当修改上篇文章中给出公式,使其可以处理这里情形。首先在每个工作数据区域左侧插入一个辅助列,该列中数据为连接要查找两个列中数据。...16:使用VLOOKUP函数多个工作中查找相匹配值(1)》。...D1:D10 传递到INDEX函数中作为其参数array值: =INDEX(Sheet3!

13.4K10

Excel公式技巧16: 使用VLOOKUP函数多个工作中查找相匹配值(1)

在某个工作表单元格区域中查找值时,我们通常都会使用VLOOKUP函数。但是,如果在多个工作中查找值并返回第一个相匹配值时,可以使用VLOOKUP函数吗?本文将讲解这个技术。...最简单解决方案是在每个相关工作中使用辅助列,即首先将相关单元格值连接并放置在辅助列中。然而,有时候我们可能不能在工作中使用辅助列,特别是要求在被查找左侧插入列时。...因此,本文会提供一种不使用辅助列解决方案。 下面是3个示例工作: ? 图1:工作Sheet1 ? 图2:工作Sheet2 ?...图3:工作Sheet3 示例要求从这3个工作中从左至右查找,返回Colour列中为“Red”对应Amount列中值,如下图4所示。 ?...,我们首先需要确定在哪个工作中进行查找,因此我们使用函数应该能够操作三维单元格区域,而COUNTIF函数就可以。

20.3K21

第12-13课 创建联结创建联结内联结联结多个外联结自联结使用带聚集函数联结小结

sql中最强大功能之一就是联结。 为什么使用联结? 因为在关系中,数据是存储在各个。如何一次检索出各个数据,答案就是使用联结啦。...内联结 就是一段代码中等值联结,基于两个之间相等测试。...vend_name, prod_name,prod_price from vendors inner join products on vendors.vend_id = products.vend_id; 联结多个...customers as c1, customers as c2 where c1.cust_name = c2.cust_name and c2.cust_contact = 'Jim Jones'; 使用带聚集函数联结...,大多数情况都是内联结,偶尔用到外联结 必须提供联结条件,不然得出是笛卡尔积,里面包含了不正确数据 在一个联结中可以包含多个

57610

Laravel源码解析之Eloquent Model

这篇文章我们来学习Laravel Database地另外一个重要部分: Eloquent Model。...Eloquent Model把数据属性、关联关系等抽象到了每个Model类中,所以Model类是对数据抽象,而Model对象则是对表中单条记录抽象。...Eloquent Model以上文讲到Query Builder为基础提供了Eloquent Builder与数据库进行交互,此外还提供了模型关联优雅地解决了多个数据之间关联关系。...this->with) ->withCount($this->withCount); } //创建数据库连接QueryBuilder...除了对数据、基本CRUD抽象外,模型另外一个重要特点是模型关联,它帮助我们优雅解决了数据关联关系。我们在之后文章再来详细看模型关联部分实现。

2.2K50

Win10 远程桌面连接出现“要求函数不受支持”解决办法之修改注册

大家好,我是架构君,一个会写代码吟诗架构师。今天说一说Win10 远程桌面连接出现“要求函数不受支持”解决办法之修改注册[通俗易懂],希望能够帮助大家进步!!!...问题起因 笔者自己在阿里云搞服务器,有一台 Windows Server 必须通过远程桌面连接来管理,由于没能完全关掉 Win10 自带烦人系统更新,导致昨天安装完更新后出现了连接远程桌面时“要求函数不受支持...问题描述 使用远程桌面连接工具连接其他主机时弹出对话框: 提示“出现身份验证错误。要求函数不受支持。可能由于CredSSP 加密 Oracle 修正”。...在 System 右键 -> 新建 -> 项,将新建项更名为 CredSSP; 2.2. 在 CredSSP 右键 -> 新建 -> 项,将新建项更名为 Parameters; 3....在弹出编辑窗口中,将数值数据改为 2,确定即可; 5. 重新尝试连接远程桌面,若仍然不行请重启计算机后重新尝试连接远程桌面。

3.5K20

Laravel系列4.4】模型Eloquent ORM使用(二)

比如说我们可以使用类似于 array_map() 函数把集合中对象全部转换成数组,还可以用一个类似于 array_column() 函数只获取数据中两个字段组成键值对形式数据。...而另外一个 map() 函数就不用多说了,之前我们说过,Laravel PDO 在默认查询构造器情况下,走是 PDO::FETCH_OBJ ,获得集合结果中每个数据都是一个 stdClass...对象,而在 Model 下,走则是 PDO::FETCH_CLASS ,也就是会和我们指定模型类关联,获得结果都是一个 App\Models\MTest Object 对象。...laravel/framework/src/Illuminate/Collections/Collection.php 是集合类,里面的方法大部分都调用laravel/framework/src/...这里路由 mTest 参数实际就是我们查询数据主键 ID ,然后模型就会自动为我们查询相应数据并注入到 $mTest 参数中。

2.8K20

Laravel框架关键技术解析

多个trait通过逗号分隔,通过use关键字列出多个trait 冲突解决:如果两个trait都插入了一个同名方法,若没有明确解决冲突将会产生一个致命错误,使用insteadof操作符来明确指定使用哪一个...,实例对象服务绑定是一个实例对象 6.回调函数绑定还分为两种: 普通绑定每次生成该服务实例对象时都会生成一个新实例对象,也就是说在程序生命周期中,可以同时生成很多个这种实例对象 单例绑定在生成一个实例对象后...,如果再次生成就会返回第一次生成实例对象 7.还有一种形式,即绑定具体类名称,本质也是绑定回调函数方式,只是回调函数是服务容器根据提供参数自动生成,如:$app-bind(XXX::class...//创建,第一次要composer down-autoload一下 php artisan db:seed [—class=类名] B.查询构造器 1.Laravel框架查询构造器是在PDO扩展基础设计一个...,可以将数据以对象形式封装使用,程序编写将变得高效而且结构清晰 3.对于多个而且间存在不同关系时,如果使用不好会严重影响程序性能 4.创建命令:php artisan make:model

11.9K20

Laravel系列4.2】查询构造器

我们又发现了一个设计模式在 Laravel 框架中应用,意外不意外,惊喜不惊喜! 连查询 普通查询使用还是非常简单,我也就不多说了,下面的代码中也有演示。...一般查询,我们只需要一个外键相对应即可,但是在我实际业务开发中,还会有遇到多个键相对应情况,这个才是我们接下来说重点问题。...`sex` }); 代码中第一段查询就是最普通一个外键查询,如果要实现多个外键连的话,就需要使用第二种方法。...它是 join() 或者 leftJoin() 这些 join 相关函数都支持一种形式,把第二个参数变成一个回调参数,然后在里面继续使用 on() 方法来进行多个外键条件连接。...总结 关于 查询构造器 其它使用在官方文档都有,今天文章就只是简单地介绍了一些常用和独特查询构造方式而已,毕竟我们系列文章主旨还是在分析源码

16.8K10

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

分享给大家供大家参考,具体如下: 1、连接数据库 laravel连接数据库配置文件位于config/database.php中,在其中connection字段中包含laravel所支持数据库配置信息...' = 1]); 3、通过查询构建器操作数据库 Laravel将常用数据库操作封装为接口函数提供给用户调用,从而使数据库操作更为便捷,这些接口就是查询构建器(query builder)。...laravel查询构建器还提供了聚合函数用于操作查询结果集,包括count(计数)、sum(求和)、avg(平均值)、max(最大值)、min(最小值),例如求年龄平均值: $res=DB::table...Laravel内置Eloquent ORM提供了一种便捷方式帮助你组织数据库数据,每张数据都对应一个与该进行交互模型(Model),通过Model类,你可以对数据进行查询、插入、更新、删除等操作...Eloquent ORM本质是查询构建器,因此上面查询构建器所使用方法Eloquent都可以使用。

13.3K51

orm 系列 之 Eloquent演化历程2

首先构造函数传入名users,而create则是加了一个命令 public function create() { return $this->addCommand('create'); }...函数,此处我们调用是compileCreate函数,至此我们就分析完了数据库操作方法,下面我们来看migrations功能。...本文最后讲下Eloquent中新增对象之间关系:多态关系,以下内容摘自[ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系 结构 多态关联允许一个模型在单个关联下属于多个不同模型...comments commentable_id 和 commentable_type。...总结 从v4.0.0开始,基本Eloquent就已经固定了,到目前最新master分支,目录结构也没有什么变化了,因此下一篇开始,我们会在最新版基础,分析下Eloquent一些具体实现,尽情期待

2.4K30

Laravel系列4.1】连接数据库与原生查询

连接数据库配置 首先我们可以看下配置文件,在 Laravel 程序 config 目录下,有一个 database.php 文件,其中有关于数据库连接配置信息。...除了这个默认配置外,我们还可以再添加多个连接配置,只要复制这个 mysql 配置,然后改名就可以了。...从 options 这个参数里面,我们可以看出,Laravel 默认使用是 PDO 连接数据库,我也没有研究在 Laravel 中如何使用 mysqli 进行连接,因为 PDO 确实已经是事实连库标准了...在这个 mysql 配置中,我们会发现很多 env() 函数调用信息。这个函数是用于读取 .env 文件中所写配置信息。...首先,我们新建一个数据库,就叫 laravel8 好了,并且同样建立一个 raw_test ,然后就是在 .env 中配置这个数据库连接信息。

3.2K50

Laravel 数据库连接配置和读写分离

数据库连接配置文件位于 config/database.php,和很多其他 Laravel 配置一样,你可以为数据库配置多个连接」,然后决定将哪个「连接」作为默认连接。...配置多个数据库连接 有时候,我们应用用到不止一个数据库,或者做项目迁移时候要做新老数据库之间数据迁移,这个时候我们就可以配置多个数据库连接,如果我们新老数据库使用都是 MySQL 的话,可以在...配置数据库读写分离连接 理论上来说,配置数据库读写分离连接也属于配置多个数据库连接范畴,但是由于是一个比较特殊又很常见使用场景,所以我们单独来讨论,Laravel 也对此进行了单独支持。...当然,对于 Web 应用而言,大多是读多写少,所以你还可以配置多个 read 主机,Laravel 底层负载均衡机制是随机从配置 IP 中挑一个连接: 'read' => [ 'host'...这一思想在 Laravel 配置中无处不在,很多服务都支持配置多个连接提供不同驱动,比如 Session 支持文件、数据连接,缓存支持 Memcached、Redis 等连接,队列支持数据库、Beanstalkd

5.2K20

Laravel 6.12.0 版本发布,支持从扩展包加载模型工厂

Laravel 开发团队本周发布了 6.12.0 版本,此次更新支持从扩展包加载模型工厂,通过 dump 函数测试 Session 数据,以及很多其他新特性。...下面我们一起来看下其中比较重要一些新特性: 1、重要特性 1)从扩展包加载模型工厂 在 Laravel 6.12 中,你可以在扩展包中直接使用已经存在模型工厂,而不需要重新创建它们,方法是在服务提供者中引入对应包含模型工厂文件...$this->loadFactoriesFrom('source/database/factories'); // 还可以一次引入多个包含模型工厂文件 $this->loadFactoriesFrom...factory(User::class)->createMany([ ['name' => 'Taylor'], ['name' => 'John'], ]); 你可以在 Github 查看完整新特性列表和更新记录...修复数据库 url 连接解析时没有指定数据库问题 防止名前缀不明确列 3)代码优化 修复下载大文件时内存使用问题 4)代码调整 使用 Event::fake() 时在解析缓存仓库时替换事件调度器

74010

Laravel5.2之Demo1——URL生成和存储

学习主题 该demo主要涉及如下几个知识点: 创建数据库并迁移数据 创建表单,学习Laravelblade模板引擎 创建名为Link模型Model 保存数据进入数据库 从数据库中获得...URL数据库,需要做几个步骤: (1)、首先创建一个数据库并定义该数据库与Laravel连接信息,Laravel框架为数据库连接提供了配置文件:/config/database.php,Laravel...这里注意下:如果不写table变量,laravel会自动根据model名字复数来找数据,如这个model名字是link,那就找links。...实际,控制器也就是路由层route、视图层view与模型model层黏合剂而已,一般写laravel代码流程也仅此而已:现在路由里写好路由,再建立好model(包括创建好migrations和model...,写好数据库连接配置、model配置、执行migrations迁移),再在控制器controller里写好业务逻辑,返回response如blade视图view或直接一个"hello world"字符串吧

24K31

通过填充器快速填充 Laravel 测试数据

我们在前两篇教程中分别介绍了如何连接到数据库,以及如何通过迁移文件定义结构来创建或修改数据,接下来,是时候在数据表里添加内容了。...在 Laravel 框架中,如果想要快速填充测试数据到数据库,可以借助框架提供填充器功能,通过填充器,我们可以非常方便地为不同数据快速填充测试数据。...填充器运行 Laravel 提供了两种方式来运行填充器:一种是独立填充命令,另一种是在运行迁移命令时通过指定标识选项在创建数据时填充。...在模型工厂文件中,我们通过 factory->define 方法来定义 User 模型模型工厂,该方法第一个参数是模型类,第二个参数是一个匿名函数,在该匿名函数中我们通过 Faker 类库提供方法来定义字段规则...,Faker 类库提供了丰富字段规则帮助我们生成伪造字段值,这些规则可以在官方文档中查看,这里,我们使用 调用模型工厂 在调用这些模型工厂时候,需要借助 Laravel 提供全局辅助函数 factory

10K20
领券