对应已经存在的表,有些表存在软删除,有些表不存在软删除字段,如果要应用软删除,只能在需要应用的model中一个个添加trait 如果重写Illuminate\Database\Eloquent\SoftDeletestrait...,查询关联关系,不会对中间表应用软删除条件 belonsToMany中的中间表是传入的表名参数,天然没办法获取中间表是否需要应用软删除。...被关联表是一个类对象,如果应用了软删除,则会自动附加上软删除条件 6、在hasManyThrough关联关系中,如果关联表,中间表,被关联表都有软删除字段,查询关联关系,会对中间表应用删除条件。...但是,如果要查询包含已删除的关联关系,中间表的删除标记条件不会去除。 hasManyThrough中,中间表是通过中间对象传入,可以获取到中间表是否应用软删除。...从上面可以看出,Laravel的软删除,在关联关系中会造成一些查询上条件的歧义,非常容易产生bug.而且,belongsToMany中间表的问题是无解的。
软删除功能需要实现的功能有以下几点: 1.模型执行删除操作,只标记删除,不执行真正的数据删除 2.查询的时候自动过滤已经标记为删除的数据 3.可以设置是否查询已删除的数据,可以设置只查询已删除的数据 4...这样就可以在查询条件中添加一个全局条件。Laravel中软删除数据的过滤也是使用这种方式实现的。...如果是远程关联,则还需要额外的处理。Laravel远程关联关系通过hasManyThrough实现。里面有两个地方涉及到软删除的查询。...以上就是Laravel实现软删除的大概逻辑。这里有一个细节,Laravel中软删除的标记是一个时间格式的字段,默认delete_at。通过是否为null判断数据是否删除。...trait,在自定义的HasRelationships中重写newHasManyThrough方法,实例化自定义的HasManyThrough对象 具体内容,后续文章介绍。
使用模型关联给应用开发带来的收益我认为有以下几点 主体数据和关联数据之间的关系在代码表现上更明显易懂让人一眼就能明白数据间的关系。...,与定义一对多关联时一样,实例化BelongsToMany时定义里与关联相关的配置:中间表名、关联的模型、父模型在中间表中的外键名、关联模型在中间表中的外键名、父模型的主键、关联模型的主键、关联关系名称...,在获取关联模型时给关系应用约束的 addEagerConstraints方法是在具体的关联类中定义的,我们可以看下HasMany类的这个方法。...*注: 下面的代码为了阅读方便我把一些在父类里定义的方法拿到了HasMany中,自己阅读时如果找不到请去父类中找一下。...模型关联常用的一些功能的底层实现到这里梳理完了,Laravel把我们平常用的join, where in 和子查询都隐藏在了底层实现中并且帮我们把相互关联的数据做好了匹配。
为什么 Laravel 这么优秀 Laravel 一直是我心中最优雅的后端框架,为了向更多的人解释为什么 Laravel 这么优雅?框架本身都做了什么操作?比起其他框架的优势在哪里等?...我准备从一个后端最常用的 CURD 例子说起,一步一步阐述这过程中 Laravel 都是怎么完成的;以及~大家~(我)为什么喜欢用 Laravel。...因为我们已经完成了数据表中字段的定义、表与表的关系、以及最重要的一步:如何将数据及数据之间的关系写入数据库中,下面简单的来介绍下在 Laravel 是如何完成的。...我猜这也是为什么 Laravel 不需要实现其他优秀的路由算法如 Radix Tree 的原因吧。...我其实很不明白作为一名工程师为什么我们会瞧不上某一门语言?
Laravel 自带的 软删除功能 就利用全局作用域从数据库中提取「未删除」的模型。编写自定义的全局作用域可以提供一个方便、简单的方法来确保给定模型的每个查询都受到一定的约束。...使用渴求式加载,即根据预先需求查询出所有数据 为了验证[渴求式加载]的好处,举下列例子 这里用到了Laravel Debugbar 调试 安装方法可参照我的另一个博客 - - - Laravel...渴求式加载多个关联关系 有时候你需要在单个操作中渴求式加载多个不同的关联关系,要实现这一功能,只需添加参数到with方法即可 ,以逗号分割 如,查询文章的作者即所在栏目 嵌套的渴求式加载 要使用嵌套的渴求式加载的关联关系...默认情况,pivot对象只包含两个关联模型的键。...,豁然开朗 原文链接 下面结合大佬的例子,阐述一下我的想法 远程一对多,顾名思义“远程”的一对多,既然称之为远程一对多,那这个一对多关系肯定不是直接关联,而是“远程”关联,问题是如何远程关联?
关联关系 One To One 假设User模型关联了Phone模型,要定义这样一个关联,需要在User模型中定义一个phone方法,该方法返回一个hasOne方法定义的关联 <?...'App\User'); } } 方法hasManyThrough的第一个参数是我们希望访问的模型名称,第二个参数是中间模型名称。...通常情况下我们可能会使用自定义的值标识关联的表名,因此,这就需要自定义这个值了,我们需要在项目的服务提供者对象的boot方法中注册关联关系,比如AppServiceProvider的boot方法中 use...关联关系查询 在Eloquent中,所有的关系都是使用函数定义的,可以在不执行关联查询的情况下获取关联的实例。...) 使用sync方法,可以指定两个模型之间只存在指定的关联关系 $user->roles()->sync([1, 2, 3]); $user->roles()->sync([1 => ['expires
不幸的是官方文档并没有涵盖所有可用的功能,因此,我决定尝试写文档为自己记录一下。以下是基于Laravel 5.4.26,其他版本可能有所不同。...注意: 如果你读了官方文档,它使用 $this->app代替 $container (在Laravel应用程序中,它实际上是Container的一个子类,称为Application这就是为什么称为助手...但是我认为他可能只能在日志/调试中使用: $container->resolving(function ($object, Container $container) { // ... });...为什么忽略参数,请参阅PR 上下文绑定 有时候你想在不同的地方使用不同的接口实现,下面是Laravel 文档中的一个例子: $container ->when(PhotoController::...在Laravel 5.5 可能会 恢复到Laravel 5.3 语法._ 其他方法 这里涵盖了我认为有用的所有方法,但只是为了整理一些内容。
目前82%的web网站使用PHP作为其服务器端的开发语言(据Web Tecnology Surveys网站调查) 在这篇文章内,我们将一起来分析3中最流行的PHP框架:Symfony、Laravel、和...我门通过说明怎么比较它们来帮助大家选择一个最适合自己需求的框架。 为什么选择使用PHP框架? 是什么让我们使用框架而不是使用纯粹的php原生语言来开发我们的应用?...Yii的性能有一个新的水平,并为快速的的代码生成和开发提供了代码脚手架。 性能 任何应用程序的性能只关系到它是否是一个使用关键数据的实时应用程序。有多少依赖高性能的web应用程序?...并不是很多,但是框架的性能在许多项目中可以起到关键的作用。...Laravel的性能是一个颇有争议的问题。它是最慢的,但这有关系吗?你会找到在线资源去加速它的性能,包括GitHub上的指南让你的laravel应用变得更快。
注:有同学反馈为什么 Laravel 版本发布这么频繁,那是因为从 Laravel 6 开始引入了新的版本发布周期,具体可参考学院君之前发布的这篇教程:Laravel 6 之后新版本的发布周期介绍。...模型工厂类 从 Laravel 8 开始,Eloquent 模型工厂将基于类进行管理,从而支持不同工厂之间的关联关系,新的模型工厂调用语法如下所示,相比之前可读性更好: use App\Models\User...()->create(); 迁移文件压缩 随着应用功能越来越复杂,需要创建越来越多的数据库迁移文件,可能多至上百个,管理起来有点麻烦,从 Laravel 8 开始,你可以将它们压缩到单个 SQL 文件中...时间测试辅助函数 在 Laravel 中,一直都可以通过 PHP Carbon 库完全控制时间的修改,Laravel 8 则在此基础上往前更进一步 —— 在测试时使用一个更加方便的辅助函数来操作时间:...:component="$componentName" class="mt-4" /> 更多新特性 以上只是从 Laravel 8 中提取的一些比较重要的新特性进行介绍,完整的新特性列表可以参考官方的版本发布日志和升级指南
下面 我分享一张 图片,此图是goole提供,laravel 在过去七年成长速度,在 php 框架自 有史以来也是最快的。 ?...路由缓存/清理 (注:基于闭包的路由无法被缓存。要使用路由缓存,你需要将代码从闭包转移到控制器类中) 如果您的应用程序只使用了基于控制器的路由,那么您应该利用 Laravel 的路由缓存。...下面我也会讲一些中间件,介绍它的项目文件、地址、以及作用,方便大家查找参考。...队列 Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。...绑定基础 绑定一个单例可以在 App\Providers\AppServiceProvider 中的 register 方法中注册。singleton 方法将类或接口绑定到只解析一次的容器中。
本文将介绍三种最流行的PHP框架:Symfony, Laravel和Yii。将通过三种框架的比较,帮助你选择哪种框架有可能最符合你的需求。 为什么要选择PHP框架?...为什么要使用框架而不是原生PHP来开发你的应用程序?下面是使用框架的一些好处: PHP框架令开发更快。...性能 任何一个应用程序的性能,只有当它是使用关键数据的实时应用程序时才是重要的。有多少基于Web的应用程序依赖于高性能?不是很多,但框架的性能在许多项目中起着至关重要的作用。...Laravel的性能是非常值得商榷的。它是最慢的,但这有什么关系呢?你可以在网上找到很多加速性能的资源,例如guide on GitHub,它可以加快你的Laravel应用程序。...对我个人来说,Laravel更佳,它作为一颗新出现的“框架之星”,没有停下来的迹象。 ? 不过,Symfony和Yii都是优秀的框架。Symfony是行之有效的,有一个更大、更成熟的社区。
_13.0 通过request->merge(["deviceType" => $this->_deviceType]);把设备类型,比如iOS或者Android merge到request中 这样我们就能在任何接收到...为什么能直接用? 经过一番调研之后发现,和model层没有关系。...之所以能在model层中直接用,不需要通过controller传递request到model中,是因为我们使用的Request实现了外观设计模式:https://segmentfault.com/a/1190000015296284...在model中甚至工具类中,只要我们使用Laravel内置的Facades下的Request,就可以取到值。...") 总结 Laravel的设计思想还是非常优雅的,外观设计模式值得再好好消化理解一下。
前言心血来潮发现laravel有php artisan serve监听端口的启动方式,突然想仔细看看laravel源码,本系列随时可能鸽,laravel版本8.83.27。...为什么是这版本呢,因为在写这篇文章时直接执行laravel的composer方式安装默认就是这版本Application的构造方法切入口就基于根目录的artisan文件常见的框架初始化入口,接下来去到/...Illuminate\Events\Dispatcher,而Illuminate\Events\Dispatcher内又引用了Illuminate\Contracts\Queue\Factory接口我们能在...()方法实现会和bind()和singleton()一起看,到时候可能会基于这里挑个例子来讲流程并验证结果至此registerCoreContainerAliases()的逻辑结束总结这次内容只看了Application...queue)的接口及实现关系。
这样就能在黑白情况下区分不同的线条了。官网给出了很多符号样式,可挑选你觉得好看的符号样式即可(虽然我觉得没几个好看的): ? 气象上常用的有三线图、五线图。...但是在py中,有一个专门进行数据处理的库包叫做pandas(为什么称为胶水语言,就是因为随时调取需要的库包),引入库包命令为: import pandas as pd 我实验时的数据存储在excel文件中...上述步骤即将excel文件读取到df变量中存储起来,然后打印出df。第一句是我给出了文件的绝对引用地址,这样py就会去读取这个指定文件。 第一列叫做索引,是用来区别每一行的。...英文这一行叫做表头,用于区分每一列。显然,此时还不能绘图,因为没有提取出每一列的数值。...这是可以使用表头进行提取,比如提取 'TEM'(温度)这一列: temps=df['TEM'] print (temps) ? 这样,一列数据就被提取出来了。
我第一个想到的就是 applications ,有一个书面申请的含义在,也是个名词,可惜这个单词在我们数据库中已经被占用,作为『应用』表了。...有时候不乏一些定制化的需求,我们可能在某些申请的时候还会附带一些额外的信息。比如申请报销的时候可能会附带报销单的信息用于展示,于是加了一个扩展字段 payload。...:『Laravel 中多态关系的表单验证[3]』 。...但是有个问题,如果申请的并不是加入到团队呢?这个时候,各种 if、else 、switch 就全跑出来了。秉承着 Laravel 优雅的原则,我打算这么干: Laravel: https://laravel.com/ [3] Laravel 中多态关系的表单验证: https://learnku.com/articles/12449/form-validation-of-polymorphic-relationships-in-laravel
为什么会有这篇文章?是因为看了 Laravel 中 Pipeline 的设计,发现 Pipeline 就是基于 AOP 思想的一种实现。...说起 AOP,就不得不说起 OOP,它们又是什么关系,有什么区别?...首先我们要知道 AOP 与 OOP 不是相互对立的关系,可以把 AOP 看作是弥补 OOP 的不足,以此之长、补彼之短,两者结合使用效果最佳。...AOP 是针对业务切面进行提取,它所面对的是处理过程中的某个 步骤 或 阶段 ,以达到逻辑处理过程中各部分之间低耦合性的 隔离效果 ,例如:日志记录、权限验证 等。...其实我们常用的 路由中间件 就是基于 AOP 思想的一种实现。 AOP 的一种实现 举例:Laravel 中的 路由中间件 。
与此同时,为了尽可能模拟一个面向未知领域的编程新手 ,在此过程中,80%以上的代码是面向 ChatGPT 编码的,即告诉 ChatGPT 我的需求,然后让它给我生成相应的代码。...产品需求 因为是 MVP 产品,所以就只实现一个核心需求 —— 以 Laravel 官网为例,批量爬取 Laravel 10 所有英文文档,然后将英文文档翻译成中文文档,最后以 Markdown 形式保存到文本文件中...结构,包括列表页和详情页(列表页提取待爬取页面链接,详情页用于提取真正要爬取的内容,以 Laravel 10 文档为例,分别是 https://laravel.com/docs/10.x 和 https...第二步:以 https://laravel.com/docs/10.x/requests 为例,文档内容位于页面右侧主体部分,即 div#main-content 元素中的内容: 要爬取这样的两级页面...系统扩展点 所谓系统扩展主要是功能通用性上的,比如爬取 Laravel 文档之外的更多页面、更多网站,这个时候,可能就需要封装出一个爬虫引擎,能够适配多个网站的不同页面提取规则。
在本篇文章中,我将跟大家一起学习 Eloquent 中最复杂也是最难理解的部分——模型间关系。...官方英文文档中叫 Relationships,个人认为翻译成 “模型间关系” 比现在的 “关联” 更好理解一点哈哈。...---- 这段代码除了展示了一对一关系该如何使用之外,还传达了三点信息,也是我对于大家使用 Eloquent 时候的建议: 1....pay: id ... ... user_id User 和 Pay 具有一对多关系,换句话说就是一个 User 可以有多个 Pay,这样的话,只在 Pay 表中存在一个 `user_id` 字段即可。...大家应该也已经注意到了,这里不是简单的 `-> hasOneAccount` 而是 `->hasManyPays()->get()`,为什么呢?
引言 上一期我们详细演示了laravel生成的命令行的参数和选项的区别。然而数据获取的方式有很多,还有一些命令行应用程序,需要我们在程序执行的过程中,实时地获取用户的输入值。...并且,一个好的系统,是不可能没有输出提示信息的。所以本期我们就来说说,过程中的输入和输出。...对于敏感数据我们不想让其在数据库命令行上显示,laravel也提供了类似 bash 中 read -s 的隐藏输入字符的功能: $password = $this->secret('What is the...如果我们可以枚举一个输入值,那就让用户只能在某一系列值的范围内搜索,可以使用 choice 方法达成: $winner = $this->choice('Who is the best football...,['Gators', 'Wolverines'],0); 第一个参数是提示文本,第二个参数传入一个数组,为可选择的一列值,第三个参数则是默认选中的那个值在数组内的索引位置。
至于说为什么 WebSocket 更好,这不在我们讨论的范围内,大家可以自行查阅相关的资料。...但是,这时你可以去试试刷新发送广播的页面,这边应该还是无法收到推送过来的消息。这是为什么呢?...我这里查看 package.json 的话是 4.4 版本的,而 laravel-echo-server 这边只支持到 2.x 版本。...具体的源码我也就不分析了,毕竟仅对于 Laravel 框架来说,无非就是事件和队列的组合应用。而前端的实力确实还达不到分析库源码的级别,所以这里也就不献丑了。...如果你的系统中有类似的通知需求,完全可以考虑使用这套广播系统来实现了,多少还是比轮询的功能要强大许多,大家多多尝试就能体会到好处。最后我再引用一张某位大佬画的广播系统的关系图。
领取专属 10元无门槛券
手把手带您无忧上云