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

如何在Laravel Eloquent中正确创建引用同一表的两个外键的关系?

在Laravel Eloquent中,可以使用belongsTohasOne方法来创建引用同一表的两个外键的关系。

首先,假设我们有一个名为users的表,其中包含两个外键字段creator_ideditor_id,它们都引用了users表的id字段。

要正确创建这两个外键的关系,我们需要在User模型中定义两个关联方法。首先,我们可以使用belongsTo方法来定义creator关联方法:

代码语言:txt
复制
public function creator()
{
    return $this->belongsTo(User::class, 'creator_id');
}

然后,我们可以使用hasOne方法来定义editor关联方法:

代码语言:txt
复制
public function editor()
{
    return $this->hasOne(User::class, 'editor_id');
}

在上述代码中,User::class表示关联的模型是User模型,'creator_id''editor_id'分别表示外键字段的名称。

接下来,我们可以通过以下方式来使用这两个关联方法:

代码语言:txt
复制
$user = User::find(1);

// 获取创建者信息
$creator = $user->creator;

// 获取编辑者信息
$editor = $user->editor;

在上述代码中,我们可以通过$user->creator$user->editor来访问关联模型的实例。

这样,我们就成功地在Laravel Eloquent中创建了引用同一表的两个外键的关系。

关于Laravel Eloquent的更多信息,您可以参考腾讯云的Laravel Eloquent文档

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

相关·内容

Laravel 模型关联基础教程详解

Laravel 定义模型关联是每个 Laravel 开发者可能已经做过不止一次事情。但是在试图实现关联时可能会遇到各种问题。因为 Laravel 有各种各样关联,你应该选择哪一个?...举个例子,一个 User 模型和一个 Passport 模型会成为一对一关联。一个用户只能拥有一张通行证,同样,一张通行证也只属于一个用户。 让我们看看如何在代码定义这种关联。 <?...我们通过 hasOne 方法告诉 Laravel User 模型有一个 Passport 。 注意: 所有用于定义关联方法都有可选额外参数,你可以在这些参数定义本地。...默认情况下,Laravel会假设你在用户模型定义了 passport_id ,因为你试图创建与 passport 模型关联。创建迁移文件时也请注意这一点!...你可以通过创建迁移文件在 Laravel 创建此中间表。 远程关联 远程一对一 has one through 关联通过单个中间关联模型实现。

5.5K31

浅谈laravel5.5 belongsToMany自身正确用法

分析 laravel或者其他框架多对多关系 一般都是由Model1 Model2 Model1_Model2(声明两者关系表)来组成, 但是上面的场景 却是只有两张表,这时候就要研究下官方文档了...; 当然是支持 参考资料 https://laravel.com/docs/5.6/eloquent-relationships#many-to-many In addition to customizing...以达到个性化需求, 第一个参数是 第二个Model 第二个参数是 关系表名 第三个参数是 第一个Model在关系ID 第四个参数是 第二个Model在关系ID 解决...关系表名是 ‘followers’ /** * 关注当前用户 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany...belongsToMany自身正确用法就是小编分享给大家全部内容了,希望能给大家一个参考。

1.3K31

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

经过一番调研之后发现了一个堪称神器扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...如果互相喜欢,则添加双向联系人关系,插入之前校验是否存在,存在则更新type等字段,不存在则插入双向数据 我们通过这个场景能非常好体会laravel-upsert强大,不仅减少了代码量,也减少了sql...->upsert(...); 在 Eloquent ,所有版本 LumenHasUpsertQueries都需要该特性。...当然了还是有一些注意点和坑,下面分享一下 注意问题 要根据需求添加唯一索引 根据官方文档说明,我们model必须添加这行代码,才能以Eloquent方式用 use \Staudenmeir\...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据库时间是int类型,不是laravel默认时间格式,并且我们插入时间和更新时间也不是laravel默认字段

5.7K20

Laravel多对多关系详解【文章 - 标签】

前言 今天弄了一天关于文章功能,其中主要卡在文章与标签多对多关系纠结。卡了半天,终于算是解决了,不是很完美,但可以。 新建迁移文件 多对多关系,需要三张表。...这是我是文章表【articles】、标签表【tags】以及关系表【article_tag】 其中关系命名是[article_tag]而不是tag_article 因为laravel默认是以字母升序排列...这里有两个,分别是文章表主键和标签表主键。...包含article_id一样记录也删除 执行迁移 php artisan migrate 声明Eloquent关系 Article ?...我们使用 $this->belongsToMany() 来表明Eloquent关系,这里需要注意是如果你并不是 article_id 和 tag_id ,你需要在第三个参数进行设置,写成类似下面这样

1.8K00

3分钟短文:说说Laravel模型关联关系最单纯“一对一”

[img] 所以,laravel模型提供了关联关系,本文就来梳理梳理那些用法。 代码时间 我们不要PPT似的念稿子,罗列出所有的关系模型,那样不直观也不是高效学习方式。...首先是数据库准备,假设有如下两个字段对应关系: [pic] 使用命令行创建一个Profile模型,并同时创建迁移文件: php artisan make:model Profile --migration...来看生成 app/Profile.php 文件内容: namespace App; use Illuminate\Database\Eloquent\Model; class Profile extends...除了在程序上下文一致性保证,还可以使用数据库,在删除user时将profile关联删除。...模型关联最简单“一对一”,我们从程序角度和数据库角度讲解了 如何在删除资源时一致性删除。

1.9K31

Laravel Eloquent 模型关联关系详解(上)

到目前为止,我们介绍所有 Eloquent 模型操作都是针对单表,接下来我们将花三篇左右篇幅来给大家介绍如何在 Eloquent 模型类建立模型之间各种关联关系,以及如何实现关联查询和更新。...比如在大型系统,我们用户表通常用于最基本信息存储,邮箱、用户名、密码等,然后像用户爱好、标签、个性签名、所在地等信息都存到另一张扩展表,需要时候才会去扩展表取数据,从而提高查询性能。...,第二个参数是关联模型类所属表,这里对应是 user_profiles 表 user_id 字段,第三个参数是关联表关联到当前模型所属表哪个字段,这里对应是 users 表 id...第二个参数是当前模型类所属表,在本例是 user_profiles 表 user_id 字段,拼接规则和 hasOne 那里类似,只不过这里是基于第四个参数关联关系名称 $relation:...第四个参数 relatedPivotKey 是中间表当前关联模型类,拼接规则和 foreignPivotKey 一样,只不过作用于关联模型类,所以在本例是 tags 表 tag_id 字段。

9.8K40

Laravel Eloquent 模型关联关系(下)

在前面两篇教程,学院君陆续给大家介绍了 Eloquent 模型类支持七种关联关系,通过底层提供关联方法,我们可以快速实现模型间关联,并且进行关联查询。...>orderBy('created_at', 'desc'); }]); 关联插入与更新 一对多关联记录插入 新增关联模型时候,可以在父模型上调用相应方法直接插入记录到数据库,这样做好处是不需要指定关联模型与父模型关联字段值...如果是要更新新创建模型实例所属模型(父模型)字段,比如以 posts 表为例,新增记录想要更新 user_id 字段,可以这么实现: $user = User::findOrFail(1);...空对象模型 如果字段 user_id 允许为空的话,当我们访问 Post 模型上 author 属性时,默认返回为 null。...Eloquent 提供了这种同步机制帮助我们更新子模型时触发父模型更新时间 updated_at 字段值更新,要让该机制生效,需要在子模型配置 $touches 属性: // 要触发更新父级关联关系

19.5K30

Laravel系列4.3】模型Eloquent ORM使用(一)

其实,Laravel Eloquent ORM 也是 Active Record 实现,这也是现在 ORM 主流。...对于 Laravel 中标准 Eloquent 模型类来说,每个表都应该有两个字段,一个是 updated_at ,另一个是 created_at ,分别是两个时间戳字段,用于记录数据创建时间和修改时间...其实所有的表最好都有这两个字段,而且很多后台管理系统还需要有 创建人 和 修改人 记录。它们目的都是为了数据安全和记录可追溯。...之所以要有这个东西,主要也是为了数据之前能够在数据库层面保持一定关联,这样我们就可以做一些特殊操作,比如说定义数据库事件或者定时任务之类,或者在关联删除时候能够更加有效率。...这样做原因也正是为了保持数据一致性和完整性。 当然,在 Laravel ,可以不在数据库层面进行严格设置,就可以在框架代码实现主外关联。

8.8K20

Laravel框架视图和模型操作方法分析

本文实例讲述了Laravel框架视图和模型操作方法。分享给大家供大家参考,具体如下: 视图 简介:视图包含了应用程序渲染HTML数据,并将应用程序显示逻辑与控制逻辑有效分离开。...在Laravel,视图被保存在resources/views目录。...name' = 'James']); }); 视图可以被嵌套保存在resoureces/views目录子目录,”.”号或”\”被用来引用嵌套视图。...('admin/profile'); 创建默认视图,只需在文件名中加上xxx.blade.xxx 判断视图是否存在,可以使用view()- exists,视图存在返回true,当不带参数view辅助方法被调用时...if(view()- exits('xxxx.xxx')); 视图数据 向视图传递数据 采用此方法传递数据,可以使用/值获得对应数据, 模型 简介:即MVC模式Model,目录名为app根目录

1.3K21

Laravel5.2之Seeder填充数据小技巧

说明:本文主要聊一聊Laravel测试数据填充器Seeder小技巧,同时介绍下Laravel开发插件三件套,这三个插件挺好用哦。同时,会将开发过程一些截图和代码黏上去,提高阅读效率。...设计字段 按照上文提到Category、Post、Comment和Tag之间关系创建迁移Migration和模型Model,在项目根目录输入: php artisan make:model Category...字段作为,与Category一对多关系 $table->foreign('category_id') ->references('id')...字段作为,与Post一对多关系 $table->foreign('post_id') ->references('id')...,还需要一张存放两者关系表: //多对多关系,中间表命名laravel默认按照两张表字母排序来,写成tag_post会找不到中间表 php artisan make:migration create_post_tag_table

3.5K42

Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解

要解决这个问题,我们可以在model里定义hidden或者visible这两个数组来进行字段隐藏或者显示: <?...address | 字段类型我就不赘述了,其中country_id、province_id以及city_id这三个分别对应了国家、省份以及城市表id。...而Customer对应customers表,会有shipping_address_id这个键指向shipping_addresses表id。...我们输出JSON数据,将会仅仅含有以上两个字段,即fullName和fullShippingAddress,非常干净,并且前端直接可用,不需要二次再加工。...,请戳官网文档: https://laravel.com/docs/5.7/eloquent-resources 本文主要讲解了Laravel5.5+ 使用API Resources快速输出自定义JSON

4.4K30

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

Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理 本博文主要介绍 Laravel 框架 Eloquent 对一对多关系处理以及在 Laravel Administrator...您数据库可能是彼此相关。比方,一篇博客文章可能有很多评论,或者一个订单与下订单用户相关。Eloquent 使得管理和处理这些关系变得简单。...Laravel 提供了四种类型关系: –一对一 –一对多 –多对多 – 多态关系 一对多 一个一对多关系样例是一篇博客文章有很多评论或者一个课程有的多次分数信息等。...)与课程表(SobjectInfo)、学生信息表(StuInfo)有主外关系 * 而且是一对多关系 */ public function StuInfo...演示样例多次使用到 “学生姓名”、“课程名”,尽管他们存储在不同,但因为我们之前在 Model已建立了它们之间 一对多关系,因此我们能够自由搭配组合 效果图例如以下: 10个Laravel4

2.1K40

何在Laravel5.8正确地应用Repository设计模式

在本文中,我会向你展示如何在 Laravel 从头开始实现 repository 设计模式。我将使用 Laravel 5.8.3 版,但 Laravel 版本不是最重要。...这意味着你业务逻辑不需要了解如何检索数据或数据源是什么,业务逻辑依赖于 repository 来检索正确数据。 关于这个模式,我看到有人将它误解为 repository 被用来创建或更新数据。...除了默认 Laravel 时间戳字段,我们博客只需要 标题、内容 和 用户 ID 字段。 <?...在 Interfaces 文件我们将创建一个包含两个方法 BlogRepositoryInterface 接口。...在这个例子,我们使用 MySQL 数据库来检索我们博客内容。我们使用 Eloquent 来完成查询数据库操作。

4.2K31

Laravel 5 系列入门教程(一)【最适合中国人 Laravel 教程】

数据库建立及迁移 Laravel 5 把数据库配置地方改到了 `learnlaravel5/.env`,打开这个文件,编辑下面四项,修改为正确信息: DB_HOST=localhost DB_DATABASE...模型 Models 接下来我们将接触Laravel最为强大部分,Eloquent ORM,真正提高生产力地方,借用库克一句话:鹅妹子英!...现 在,Artisan 帮我们在 `learnlaravel5/app/` 下创建两个文件 `Article.php` 和 `Page.php`,这是两个 Model 类,他们都继承了 Laravel...这里需要强调一下,用命令行方式创建文件,和自己手动创建文件没有任何区别,你也可以尝试自己创建两个 Model 类。 Model 即为 MVC M,翻译为 模型,负责跟数据库交互。...在 Eloquent ,数据库每一张表对应着一个 Model 类(当然也可以对应多个)。

3.4K20

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

本文实例讲述了laravel框架数据库操作、查询构建器、Eloquent ORM操作。...分享给大家供大家参考,具体如下: 1、连接数据库 laravel连接数据库配置文件位于config/database.php,在其中connection字段包含laravel所支持数据库配置信息...')- avg('age'); 4、Eloquent ORM ORM是对象关系映射(Object Relational Mapping)简称,是一种实现面向对象编程语言里不同类型系统数据之间转换技术...Eloquent默认会管理数据表创建时间、更新时间,对应数据表created_at、updated_at字段,你需要在创建表时包含这两个字段。...()、first()来获取数据 通过上面的增删改查可以看出Eloquent可以使用查询构建器所有方法,除了增删改查,还有where、聚合函数等。

13.3K51
领券