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

有没有办法让Laravel 7的多态关系与Laravel 8协同工作?

Laravel 是一个流行的 PHP 框架,提供了多态关系(Polymorphic Relations)的功能,允许模型之间建立通用的多态关联。然而,在 Laravel 7 和 Laravel 8 版本之间,多态关系的实现方式有所不同。

在 Laravel 7 中,多态关系的实现需要使用 morphTomorphMany 方法。具体步骤如下:

  1. 在父模型中,使用 morphTo 方法定义多态关联。例如,如果父模型是 Comment,则可以定义以下关联方法:
代码语言:txt
复制
public function commentable()
{
    return $this->morphTo();
}
  1. 在关联模型中,使用 morphMany 方法定义多态关联的反向关系。例如,如果关联模型是 Post,则可以定义以下关联方法:
代码语言:txt
复制
public function comments()
{
    return $this->morphMany(Comment::class, 'commentable');
}
  1. 使用相应的数据库字段来存储多态关联的信息。在 comments 表中,需要添加 commentable_idcommentable_type 字段,用于存储关联模型的 ID 和类名。

而在 Laravel 8 中,多态关系的实现方式进行了改进。新的实现方式使用了 morphTomorphToMany 方法。具体步骤如下:

  1. 在父模型中,使用 morphTo 方法定义多态关联。与 Laravel 7 的实现方式相同。
  2. 在关联模型中,使用 morphToMany 方法定义多态关联的反向关系。与 Laravel 7 的实现方式不同,这里使用 morphToMany 方法代替了 morphMany 方法。例如,如果关联模型是 Tag,则可以定义以下关联方法:
代码语言:txt
复制
public function comments()
{
    return $this->morphToMany(Comment::class, 'commentable');
}
  1. 使用相应的中间表来存储多态关联的信息。在上述例子中,需要创建 commentables 表作为中间表,该表应包含 comment_idcommentable_idcommentable_type 字段。

综上所述,要让 Laravel 7 的多态关系与 Laravel 8 协同工作,需要根据各自的版本使用对应的实现方式。具体来说,在 Laravel 7 中使用 morphTomorphMany 方法,在 Laravel 8 中使用 morphTomorphToMany 方法。

请注意,以上答案仅涉及 Laravel 多态关系的基本实现方式,具体的应用场景和优势可以根据具体需求进行灵活运用。关于 Laravel 的更多信息和相关产品推荐,您可以参考腾讯云 Laravel 托管服务(https://cloud.tencent.com/product/lvh)和腾讯云云服务器(https://cloud.tencent.com/product/cvm)等相关产品页面。

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

相关·内容

一种 Laravel 中简单设置多态关系模型别名方式

作为 Laravel 重度使用者肯定都对多态关系不陌生,以官方文档为例,文章有标签,视频有标签,那么文章和视频这些模型标签模型关系就是多态多对多(Many To Many (Polymorphic...我已经至少出现这个问题 3 次了,所以我一直在纠结有没有更好方法,今天突然灵机一动,实现了一个看起来似乎是一个不错方式,分享给大家。...思路来源 我尝试跟踪了一遍源码,发现模型中有一个方法 getMorphClass,多态关联时候,就是用它来取目标对象类型名称,默认返回类名: public function getMorphClass...; class Post extends Model { use UseTableNameAsMorphClass; //... } 友情提示 当然,如果你习惯给表名加前缀,或者你表名模型名不太一致...References [1] 多态多对多(Many To Many (Polymorphic)): https://laravel.com/docs/6.x/eloquent-relationships

2.7K10
  • 详解Laravel设置多态关系模型别名方式

    作为 Laravel 重度使用者肯定都对多态关系不默生,以官方文档为例,文章有标签,视频有标签,那么文章和视频这些模型标签模型关系就是 多态多对多(Many To Many (Polymorphic...我已经至少出现这个问题 3 次了,所以我一直在纠结有没有更好方法,今天突然灵机一动,实现了一个看起来似乎是一个不错方式,分享给大家。...思路来源 我尝试跟踪了一遍源码,发现模型中有一个方法 getMorphClass ,多态关联时候,就是用它来取目标对象类型名称,默认返回类名: public function getMorphClass...Eloquent\Model; class Post extends Model { use UseTableNameAsMorphClass; //... } 友情提示 当然,如果你习惯给表名加前缀,或者你表名模型名不太一致...总结 以上所述是小编给大家介绍Laravel设置多态关系模型别名方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家。在此也非常感谢大家对ZaLou.Cn网站支持!

    2K21

    orm 系列 之 Eloquent演化历程2

    ,也是laravel中一大亮点Artisan,Artisan是 Laravel 自带命令行接口名称,此处不做具体介绍了,有机会再细说,当我们在命令行中执行php artisan command时候...本文最后讲下Eloquent中新增对象之间关系多态关系,以下内容摘自[ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系 表结构 多态关联允许一个模型在单个关联下属于多个不同模型...例如,假设应用用户既可以对文章进行评论也可以对视频进行评论,使用多态关联,你可以在这两种场景下使用单个comments表,首先,让我们看看构建这种关联关系需要表结构: posts id - integer...此处为什么会出现Manager,当项目变复杂后,我们很难简单和Eloquent内部组件进行有效功能了,这个时候需要一个项目的门面,帮助我们和外界沟通,外界尽可能简单使用Eloquent,于是就出现了...参考 [ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系

    2.4K30

    Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理

    Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理 本博文主要介绍 Laravel 框架中 Eloquent 对一对多关系处理以及在 Laravel Administrator...您数据库可能是彼此相关。比方,一篇博客文章可能有很多评论,或者一个订单下订单用户相关。Eloquent 使得管理和处理这些关系变得简单。...Laravel 提供了四种类型关系: –一对一 –一对多 –多对多 – 多态关系 一对多 一个一对多关系样例是一篇博客文章有很多评论或者一个课程有的多次分数信息等。...> 定义之相应逆向关系 Model: 通过以上步骤处理。表表之间一对多关系已确立, 以下将介绍在Laravel Administrato 后台中实现 下拉列表查询、绑定等应用 <?

    2.1K40

    Laravel5.1 框架模型多态关联用法实例分析

    本文实例讲述了Laravel5.1 框架模型多态关联用法。分享给大家供大家参考,具体如下: 什么是多态关联?...一个例子你就明白了:好比如说评论 它可以属于视频类 也可以属于文章类,当有个需求是 从评论表中取到视频类数据,这就需要用到多态关联了。 简单一句话总结:一张表对应两张表。...1 实现多态关联 1.1 文章表结构 public function up() { Schema::create('articles', function (Blueprint $table...$comment- item_type; } }); 更多关于Laravel相关内容感兴趣读者可查看本站专题:《Laravel框架入门进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程...》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家基于Laravel框架PHP程序设计有所帮助。

    47430

    Laravel学习记录--Model

    - 多态一对 - 多态一对多 - 多态多对 关联查询 继承:ILLuminate\Database\Eloquent\Model model表名关系 表名去掉...,对于数据库查询优化角度来说,显然不合理,有没有方法能一次就返回所有的关联查询结果呢?...(articles),用户文章是一对多关系,国家用户也是一对多关系,那么怎么实现根据不同国家显示对应文章?...学到了这里,理解多态多对多也不是很难了,还是举例说明,文章标签关系,多对多这个大家知道,因此我们需要建立文章表标签表,以及中间表,中间表存放文章标签表id使他们建立连接,这是常规套路,但如果我们系统大一点...这样或许也行吧,或许有更方便办法—就是马上要学习多态多对多,多态多对多也是需要中间表,常规多对多差不多,只是中间表需要_type(模型类型字段),_id(关联模型id) 话不多说直接上案例 我们要实现功能是

    13.6K20

    Vuebnb:一个用vue.js和Laravel构建全栈应用

    在这篇文章中,我会把它如何工作做一个高层次概述,好你了解如何从零开始参与建设一个Vue/Laravel构建全栈应用。...我还用Laravel安全认证API调用,这是用户能够保存他们喜欢房间列表。 特征 该项目的功能主要包括UI组件以及应用程序总体架构设计。...解决方案包括一个协同使用VueVue-Router,Vuex和Axios一起创造一个令人惊讶简单机制,在需要用于检索数据时使用它。 ?...我在本文中没有提到其他主题包括: Vue.js数据绑定核心概念、指令和生命周期挂钩 建立全栈应用最佳实践开发工作流Vue/laravel,包括WebPack。...全栈应用程序生产部署,免费Heroku App和CDN服务相关静态资源 我很高兴地这本书已经出版了!

    6K10

    从0开始做一个审批模块

    所以这个需求方,可以定义为多态,说通俗一点就是通过类型和 ID 来决定对象。不过这里我并没有定义为多态,因为应用里面不会出现需求方不确定类型场景,还是继续沿用 creator_id。...'review', $apply); $apply->markAsRejected(); return \response()->noContent(); } } ‍对多态关系表单验证不太清楚可以戳这里...:『Laravel多态关系表单验证[3]』 。...References [1] 一对多多态关联: https://learnku.com/docs/laravel/8.x/eloquent-relationships/9407#one-to-many-polymorphic-relations...[2] Laravel: https://laravel.com/ [3] Laravel多态关系表单验证: https://learnku.com/articles/12449/form-validation-of-polymorphic-relationships-in-laravel

    1.7K10

    推荐18-Laravel scout elasticsearch 案例

    ,设成 0.0.0.0 任何人都可以访问。...线上服务不要这样设置,要设成具体 IP 基本概念 elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以允许多个 elastic 实例,单个 elastic 实例称为一个节点...由于里面的概念内容比较多,贴出两个讲解非常好博客: 阮一峰讲解 ElastSearch 技术分析 看完了之后,我们可以用一个对比来了解一下其中重要概念 - 关系型数据库 -> Databases...Laravel scout es 先安装 scout 包 composer require laravel/scout 再生成配置文件 php artisan vendor:publish --provider...="Laravel\Scout\ScoutServiceProvider" 在 config/app.php provider 中,添加 Laravel\Scout\ScoutServiceProvider

    1.4K10

    Laravel Eloquent 模型关联关系(下)

    >orderBy('created_at', 'desc'); }]); 关联插入更新 一对多关联记录插入 新增关联模型时候,可以在父模型上调用相应方法直接插入记录到数据库,这样做好处是不需要指定关联模型父模型外键关联字段值...多对多关联绑定解除 在插入多对多关联记录时候,可以通过上面一对多关联记录插入方式。...对于那些已存在标签记录,我们可以通过更高效方法文章进行关联关系绑定和解除,这个方法就是 sync,调用该方法时只需传入刚创建/更新后文章标签对应 ID 值,至于哪些之前不存在关联需要绑定,哪些存在关联需要解除...: 结语 好了,关于关联关系我们就介绍到这里,我们分了三篇篇幅来介绍 Eloquent 模型管理关系,回顾一下,主要包含以下内容: 七种关联关系定义:一对一、一对多、多对多、远层一对多、一对一多态关联...、一对多多态关联、多对多多态关联; 以上关联关系查询,主要包含两种方式:懒惰式加载和渴求式加载; 基于关联查询构架复杂查询对查询结果进行过滤; 关联模型更新、插入和删除操作。

    19.6K30

    宇宙最强语言PHP“全栈”框架——Laravel来了!

    使用包,可以其他人负责开发和维护一个独立、具有特定功能代码块,从理论上说,开发人员可以有更多时间对这些单个组件进行深入了解研究。...它提供了一个经深思熟虑后得到答案,并确保你所选择特定组件能够很好地协同工作。 此外,框架提供了一些约定,可以减少开发人员在创建新项目时必须理解代码量。...例如,如果你了解一个 Laravel项目中路由是如何工作,那么也就了解了路由在所有 Laravel 项目中工作原理。...Laravel 正试图从开发人员工作中提取出重复性工作,这样开发人员就可以做一些独特事情了。...更因为你,亲爱开发者,使用 Laravel你感到快乐!

    2.4K10

    如何选择PHP框架?

    PHP是世界上最受欢迎编程语言之—。最近发布PHP7令这种服务器编程语言比以前变得更好,更稳定了。 PHP被广泛应用于重大项目。例如Facebook就是使用PHP来维护和创建它们内部系统。...它有30个组件可以选择,开发人员可以有足够自由在RAD环境下进行试验和工作。Symfony API还允许使用第三方应用来方便集成,它可以流行前端框架,例如AngularJS一起使用。...php echo htmlspecialchars($var, ENT_QUOTES, 'UTF-8') ?...Laravel性能是非常值得商榷。它是最慢,但这有什么关系呢?你可以在网上找到很多加速性能资源,例如guide on GitHub,它可以加快你Laravel应用程序。...项目是开源,其源代码可以在GitHub上找到,任何人都能轻松做出贡献: Symfony Laravel Yii 该框架有很好文档记录,并由一个大社区支持。 它们都支持ORM(对象关系映射)。

    7.8K90

    10个比较流行PHP框架

    Symfony也非常灵活,可以Drupal这样大型项目集成。Symfony和Laravel有许多共同和独特特性,这使得很难说哪一个框架更好。...此外,其健壮安全特性使框架适合于高度安全工作,如电子商务项目、门户、CMS、论坛和许多其他。...Zend框架附带了非常好文档,并且有一个很大社区基础。然而,如果你是一个移动应用程序开发者,准备好面对一个陡峭学习曲线。 7. Phalcon ?...不利一面是,Phalcon开发人员在修补bug方面有点慢,这可能不符合当今对高级别安全性需求。 8. Swoft ? Swoft是一个高性能PHP微服务协同程序框架。...它已经出版多年,已经成为php最佳选择。它可以像Go一样,内置协同程序web服务器和通用协同程序客户机,并且驻留在内存中,独立于传统PHP-FPM。

    12.7K20

    如何在Ubuntu 14.04上使用Ansible部署高级PHP应用程序

    本教程结束时目标是您拥有一个具有上述高级配置完全可用PHP应用程序服务器。 上一个教程一样,我们将使用Laravel框架作为示例PHP应用程序。...(自建服务器难免会遇到这样问题,配置SSL很麻烦,虽然对一部分人来说这也是一种乐趣,但是如果您在生产环境使用,我还是建议您直接使用云关系型数据库,云关系型数据库您在云中轻松部署、管理和扩展关系型数据库...云关系型数据库是一种高度可用托管服务,提供容灾、备份、恢复、监控、迁移等数据库运维全套解决方案,可将您从耗时数据库管理任务中解放出来,您有更多时间专注于您应用和业务。)...步骤9 - 配置队列守护程序 步骤8名为schedule:runArtisan命令一样,Laravel还带有一个可以使用queue:work --daemonArtisan命令启动队列工作程序...在此步骤中,我们将为Laravel配置队列守护程序worker。 队列工作cron作业类似,因为他们在后台运行任务。

    10.7K60

    Laravel为什么会成为最优雅PHP框架?

    内置依赖注入容器 Laravel内置了一个强大依赖注入容器,用于管理类类之间依赖关系。这使得应用程序解耦和测试变得更加容易,同时促进了代码重用性和可维护性。...依赖注入容器还支持自动解析和依赖注入,进一步简化了开发者工作。通过依赖注入,Laravel鼓励开发者编写更加模块化、松耦合代码,从而提高应用程序灵活性和可扩展性。 6....Laravel社区还提供了详尽文档和丰富教程资源,帮助开发者快速上手并解决实际问题。此外,社区中开发者经常分享自己经验和最佳实践,促进了Laravel技术不断进步和发展。 7....此外,Laravel还定期进行安全更新和漏洞修复,确保应用程序稳定性和安全性。 8....Laravel集成能力得益于其灵活架构和丰富扩展包支持。无论是想要添加新功能模块还是第三方服务进行交互,Laravel都能提供便捷支持和解决方案。

    10210

    怎样选择适合自己php框架

    PHP是世界上最流行编程语言之一,并且最近PHP7发布这门服务器端编程语言比以往更加强大和稳定。 PHP广泛应用于大型项目,例如Facebook使用PHP来建立和维护他们内部系统。...有30个组件可供选择,开发者有完全自由在RAD环境中实验和工作。Symfony APIs也使得它很容易第三方应用整合,它也能与流行前端框架一起使用,比如AngularJs。...怎样比较它们 这3个框架开发Web2.0应用都非常好,但是各自服务不同目的。让我们看看它们特性以及它们目前状态。 模版引擎 模板引擎在编写前端代码时,简化开发者工作并提供更好功能。...Laravel性能是一个颇有争议问题。它是最慢,但这有关系吗?你会找到在线资源去加速它性能,包括GitHub上指南laravel应用变得更快。...管理扩展包 单元测试做得很好 提供了大量扩展包来扩展框架功能 有强大社区支持和丰富学习资源 结论 在SymfonyLaravelYii竞争中,3个框架都是极好选择,都为开发者提供来全栈开发环境

    4.7K20

    通过基准测试探究 JIT 对 PHP 应用性能影响

    看起来很高大上,不过 JIT 主要针对 CPU 密集型操作优化效果明显,而目前主流 PHP Web 应用都是 IO 密集型操作,那么 PHP 8 引入 JIT 对这些 Web 应用性能有没有提升呢...3、编译安装 PHP 8 测试版 完成上述准备工作后,就可以开始 PHP 8 测试版本编译安装了,首先,我们从 Github 下载 PHP 8 测试版本源码(PHP 官网源码包下载太慢): wget...6、Web 应用基准测试 接下来,我们以 Laravel 演示项目为例,演示 PHP Web 应用中启用 JIT 不启用性能有没有提升。...-w796 可以看到在 IO 密集型操作 Web 应用中,启用 JIT 不启用相比,性能不但没有提升,反而有 10% 左右损耗,至少在 Laravel 应用中是如此。...7、小结 当然,这里测试仅限于学院君 Ubuntu 虚拟机环境(Windows WSL 版,配置是 8C8G),并且我也只是将 JIT 参数调整为官方建议参数,没有做更多对比测试,但是可以肯定

    1.1K20

    Mac上下载安装Vagrant、配置打包属于自己开发环境(使用Homestead后续也会更新出来)

    目前解决这种问题最佳方法有Docker(生产环境line)、Vagrant(用于开发环境dev)。 Vagrant和Homestead关系?...Homestead 是包含了Nginx Web服务器、PHP7、MySQL、Postgres、Redis、Memcached、Node,以及所有你在使用 Laravel 开发时需要用到各种软件(Homestead...Box 虚拟机盒子),它一套可配置 Laravel 开发环境(Homestead 管理脚本),其实简单说就是一个基于Laravel运行环境打包一个Box。...官网下载地址: virtualbox下载地址 vagrant下载地址1 vagrant下载地址2 box下载 由于Vagrant官网下载Box太慢,这里提供了一个迅雷下载办法。...启用SSH登陆VM # vagrant ssh 7. 查看VM当前状态 # vagrant status 8.

    1.6K20

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券