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

laravel 7.如何在Laravel中使用外键从不同的表中获取记录?

在Laravel中使用外键从不同的表中获取记录,可以通过Eloquent关系来实现。

  1. 首先,在数据库表中定义外键关系。假设我们有两个表:usersroles,它们之间是一对多的关系,即一个用户可以有多个角色,而一个角色只属于一个用户。在users表中,可以添加一个role_id列作为外键,指向roles表的主键。
  2. User模型类中定义与Role模型的关联关系。在app\Models\User.php文件中,可以添加以下代码:
  3. User模型类中定义与Role模型的关联关系。在app\Models\User.php文件中,可以添加以下代码:
  4. 在这个关联方法中,使用belongsTo方法来定义一对多的关系,指定关联的模型类为Role。Laravel会自动推断外键名为role_id,如果外键名不是默认值,可以通过第二个参数来指定。
  5. Role模型类中定义与User模型的关联关系。在app\Models\Role.php文件中,可以添加以下代码:
  6. Role模型类中定义与User模型的关联关系。在app\Models\Role.php文件中,可以添加以下代码:
  7. 在这个关联方法中,使用hasMany方法来定义一对多的关系,指定关联的模型类为User
  8. 现在,可以通过以下方式来获取用户的角色信息:
  9. 现在,可以通过以下方式来获取用户的角色信息:
  10. 在这个例子中,首先通过User模型的find方法来获取指定id的用户实例。然后,通过访问role属性来获取用户的角色信息。由于定义了关联关系,Laravel会自动执行关联查询,获取用户关联的角色。
  11. 另外,还可以通过以下方式来获取属于某个角色的所有用户:
  12. 另外,还可以通过以下方式来获取属于某个角色的所有用户:
  13. 在这个例子中,首先通过Role模型的find方法来获取指定id的角色实例。然后,通过访问users属性来获取属于该角色的所有用户信息。

以上是在Laravel中使用外键从不同的表中获取记录的方法。对于外键的使用,Laravel提供了便捷的关联关系方法,使得查询和获取相关记录变得简单和高效。

腾讯云相关产品推荐:腾讯云数据库 MySQL,提供稳定可靠的云数据库服务,支持灵活的扩展和高性能的访问。详情请参考腾讯云官方文档:腾讯云数据库 MySQL

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

相关·内容

Laravel 模型关联基础教程详解

Laravel 有 3 种不同关联类型。 一对一 一对多 多对多 我们将逐个探讨不同关联类型并解释一下应该什么时候使用它们。 一对一 一对一关联是目前存在最基本关联。...举个例子,一个 User 模型和一个 Passport 模型会成为一对一关联。一个用户只能拥有一张通行证,同样,一张通行证也只属于一个用户。 让我们看看如何在代码定义这种关联。 <?...我们通过 hasOne 方法告诉 Laravel User 模型有一个 Passport 。 注意: 所有用于定义关联方法都有可选额外参数,你可以在这些参数定义本地。...不包含 supplier_id 列,供应商也可以通过使用 「has one through」 关系访问 product_history 记录。...此属性表示中间,可以像任何其他模型一样使用。 举个例子,假设连接有 created_at 字段,我们就可以使用 pivot 来获取 created_at 字段。 <?

5.5K31
  • Laravel Eloquent 模型关联关系(下)

    性能上来说,渴求式加载更优,因为它会提前数据库一次性查询所有关联数据,而懒惰式加载在每次查询动态属性时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,所以在开发过程如果想优化性能...,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身获取,总共需要进行 N + 1 次查询,而 PHP 对数据库连接是短连接,每次都要重新连接数据库,所以性能角度考虑不建议使用这种方式...>orderBy('created_at', 'desc'); }]); 关联插入与更新 一对多关联记录插入 新增关联模型时候,可以在父模型上调用相应方法直接插入记录到数据库,这样做好处是不需要指定关联模型与父模型关联字段值...如果是要更新新创建模型实例所属模型(父模型)字段,比如以 posts 为例,新增记录想要更新 user_id 字段,可以这么实现: $user = User::findOrFail(1);...空对象模型 如果字段 user_id 允许为空的话,当我们访问 Post 模型上 author 属性时,默认返回为 null。

    19.6K30

    laravel - 根据数据库逆向生成迁移文件

    ”这个库,但是很明显作者2017年之后,就没有再维护过了,很显然是不适合laravel9.x去用,所以我找到了一个可以完美平替库 生成迁移 首先需要在config/database.php配置好数据库连接信息...(亲测支持前缀),然后使用composer安装库 composer require kitloong/laravel-migrations-generator 之后使用laravelartisan就可以逆向生成迁移文件了...视图和将在 +1秒内创建....-default-index-names 不使用数据库索引进行迁移 --default-fk-names 不使用数据库进行迁移 --use-db-collation 使用现有数据库排序规则生成迁移...--skip-log 不写入迁移日志 --skip-views 跳过视图 --skip-proc 跳过存储过程 --squash 将所有迁移文件合并至一个文件 --with-has-table 使用

    1.6K50

    还得再来聊聊Laravel对多对模型一些事

    确实看laravel中文文档,看得糊里糊涂。还是得在实践理解啊。 情景假设 我有一张来源(referers)来记录href和网页标题title。...还有一张信息(netDisks)来记录一些东西。 目前需求是信息表里面的多个信息可能同属于来源一条记录。 同样,来源多条信息可能属于信心一条记录。...简言之就是,这是多对多关系。 细节 新建迁移文件就不说了。 我想说重点是: 1、来源和信息可以没有任何约束,意思就是说各建各,不用考虑什么。...重点是第三张,第三张最少需要2个字段:即两张 ? 注意: 1、你想要有其他字段也行,我们这里讨论最简单情况。 2、第三张命名有要求,主要是Laravel默认情况关系。...至于能不能传入其他参数,或者有没有其他类似attach作用方法,我翻遍中文文档和百度,愣是没搞明白。 2、attach要使用,要在模型定义关联。 ?

    1.6K00

    laravel与thinkphp之间区别与优缺点

    ---- 问题描述: 1、渲染模版方式不同Laravel框架里,使用return view()来渲染模版;而ThinkPHP里则使用了$this->display()方式渲染模版。...3、Laravel框架提供了大量闭包 作为菜鸟我目前只使用了use方法,即如何在函数内部使用外层变量。...无须担心,githubpull下项目后在数据表里直接修改,只需要用: php artisan migrate:refresh 9、ORM 在介绍建时已经使用了创建模型命令: php artisan...你可以通过模型查找数据数据,以及将记录添加到数据。)...本人在实际使用也实实在在感受到了通过创造模型对数据操作带来便利,譬如:批量赋值,跨查询,删除模型和软删除,模型关联,当然这些在TP框架也可以利用模型实现。

    5.6K20

    Laravel学习记录--Model

    : hasOne(class,foreignkey,primarykey); class:关联模型类名 foreignkey:关联模型,如果不指定默认在这里默认为 muser_id...public function show(){ $res=Muser::find(1)->phone; //在phones查找uid(uid=1)与musers主键uid...渴求式加载多个关联关系 有时候你需要在单个操作渴求式加载多个不同关联关系,要实现这一功能,只需添加参数到with方法即可 ,以逗号分割 ,查询文章作者即所在栏目 嵌套渴求式加载 要使用嵌套渴求式加载关联关系...当获取模型记录时,你可能需要根据不存在关联对结果进行限制,获取没有电话号码用户记录,为了实现这个功能你可以使用doesntHave,并传递关联方法 public function show...有时候你需要更新中间已经存在记录使用updateExistingPivot方法 该方法接受中间记录另一个和一个关联数组进行更新 public function show(){

    13.6K20

    Laravel和Thinkphp有什么区别,哪个框架好用

    1、渲染模版方式不同Laravel框架里,使用return view()来渲染模版;而ThinkPHP里则使用了$this->display()方式渲染模版。...3、Laravel框架提供了大量闭包 作为菜鸟我目前只使用了use方法,即如何在函数内部使用外层变量。...无须担心,githubpull下项目后在数据表里直接修改,只需要用: php artisan migrate:refresh 9、ORM 在介绍建时已经使用了创建模型命令: php artisan...你可以通过模型查找数据数据,以及将记录添加到数据。)...本人在实际使用也实实在在感受到了通过创造模型对数据操作带来便利,譬如:批量赋值,跨查询,删除模型和软删除,模型关联,当然这些在TP框架也可以利用模型实现。

    6K20

    Laravel5.1 框架模型一对一关系实现与使用方法实例分析

    本文实例讲述了Laravel5.1 框架模型一对一关系实现与使用方法。分享给大家供大家参考,具体如下: 这篇文章主要记录模型一对一关系,关联关系是Model一种非常方便功能。...1 实现一对一关系 1.1 准备工作 首先我们需要创建两张和对应两个模型,第一个模型是用户,第二个模型是账号。...如果省略了第二个和第三个参数的话 Laravel根据方法名自动填充,会把第二个参数填充成 “user_id” 第三个参数填充 “id”,但是我们现在必须这样写,因为我自定义是user_info_id...如果Laravel自动填充的话是找不到这个 所以我们要手动添加下。...belongsTo第二个参数是 Account这个模型要用’user_info_id’去关联UserInfo模型。

    1.4K10

    为什么 Laravel 这么优秀?

    因为我们已经完成了数据字段定义、关系、以及最重要一步:如何将数据及数据之间关系写入数据库,下面简单来介绍下在 Laravel 是如何完成。...可以高效使用 Eloquent ORM 实现各种查询;如上面的例子我们使用了 withCount 来查询课程学生数量、用 with 加载课程对应教师;还可以指定生成 SQL 查询只包含某几个字段...我们还使用Laravel Resource 来格式化最终输出格式,这样做原因是很多情况下我们不希望直接将数据库字段暴露出去,你甚至还能在 Laravel Resource 不同角色显示不同字段... Java Spring 会在编译时为 Sprint Container 填充不同对象,在使用时就能向容器获取不同值。...; CacheServiceProvider 会向容器中注册 Cache 对象,后续在使用 Cache::get 时就使用是这里注册 Cache 对象,在注册阶段不应该向容器获取值,因为此时服务可能还没有

    22510

    PHP 数组:索引数组与关联数组

    在静态语言(C、Java、Go),数组定义通常是同一类型数据连续序列,PHP 数组功能角度来说更加强大,可以包含任何数据类型,支持无限扩容,并且将传统数组和字典类型合二为一,在 PHP ,传统数组对应是索引数组...下面,我们就来简单介绍下 PHP 索引数组和关联数组基本使用。 1、索引数组 基本使用 所谓索引数组指的是数组为隐式数字,并且会自动维护,就像静态语言数组一样。...2、关联数组 基本使用 PHP 没有字典(map/dict)这种数据类型,而是将其融入到数组以关联数组方式提供支持,与索引数组不同,关联数组通常需要显式指定数组元素,还是以「Laravel 精品课...除了指定所有元素键名,还可以部分指定: $book = [ 'name' => 'Laravel精品课', 'author' => '学院君', 'publish_at' =...好了,关于 PHP 数组基本使用学院君就简单介绍到这里,下一篇教程,我们来学习 PHP 运算符和控制结构。

    5.8K20

    3分钟短文 | Laravel模型关联删除表记录,用观察者还是事件钩子

    引言 说一个场景需求,假如有一个user模型,用户上传图片存在另外一张photo内。当删除该用户时,想要同时删除关联photo相关记录。应该用什么办法呢? ?...本文就来说说 Laravel ORM 操作事件钩子。 学习时间 如果想要实现上一节所说需求,代码写起来可能是这样。 $user->delete(); 当该事件发生时,我们接着执行关联删除。...MySQL提供了约束,并且可以定义触发器用于批次动作处理。...那么使用 Laravel migrations 时,创建photo关联事件: $table->foreign('user_id')->references('id')->on('users')-...不推荐使用! 写在最后 本文通过3种方式,实现了Laravel关联删除表记录功能。

    1.9K10

    通过 Laravel 查询构建器实现复杂查询语句

    有时候,我们想要获取并不是一行或几行记录,而是某个字段值,你当然你可以查询到一行记录结果对象获取指定字段值,但是 Laravel 为我们提供了更便捷语法: $name = '学院君'; $...你一定有过这样经历,数据库获取指定查询结果后,以主键 ID 值为,以某个字段值为值构建关联数组,以前,你可能不得不遍历查询结果构建数组才能解决这样问题,在 Laravel ,我们只需在查询构建器上调用...posts p inner join users u on p.user_id <> u.id 链接: 左连接:返回左所有行,如果左行在右没有匹配行,则返回结果对应列返回空值...则结果对应列返回空值, select * from posts p right join users u on p.user_id = u.id 全连接:返回左和右所有行。...另一种是通过 offset 方法和 limit 方法组合进行分页查询,offset 表示第几条记录开始,limit 表示一次获取多少条记录使用方式和 skip 和 take 类似: $posts =

    30.1K20

    Laravel之Eloquent ORM

    你只需继承一个abstract Active Record 类就可以使用该设计模式访问数据库,其最大好处是使用非常简单 ? ?...:通知数据库根据关联和建立索引,提高运行速度 $table->foreign('user_id') ->references('id')...自定义: return $this->hasOne(Profile::class,'显示指定自定义'); 2.4 一对一测试 依赖注入Request $request,获取当前登录用户$request...获取每个国家论文总数: ? 五、多样化一对多关系映射(多态关联) 面向对象多态:运行时加载机制 ? 更多:https://laravel-china.org/doc... 伪造数据: ? ?...使用多对多多态关联可以让您在文章和视频中共享唯一标签列表。 更多:https://laravel-china.org/doc...

    1.9K30

    Laravel系列4.2】查询构造器

    使用 查询构造器 也是通过一个 DB 门面,但是,在这里我们需要通过 table() 方法指定一个名。之后操作就全都是针对这个指定名了。接下来,我们就可以通过链式调用方式进行数据库操作。...我们又发现了一个设计模式在 Laravel 框架应用,意外不意外,惊喜不惊喜! 连查询 普通查询使用还是非常简单,我也就不多说了,下面的代码也有演示。...一般查询,我们只需要一个相对应即可,但是在我实际业务开发,还会有遇到多个相对应情况,这个才是我们接下来说重点问题。...`sex` }); 代码第一段查询就是最普通一个查询,如果要实现多个的话,就需要使用第二种方法。...它是 join() 或者 leftJoin() 这些 join 相关函数都支持一种形式,把第二个参数变成一个回调参数,然后在里面继续使用 on() 方法来进行多个条件连接。

    16.8K10

    浅谈laravel orm 一对多关系 hasMany

    个人对于laravel orm 对于一对多关系理解 文章 article,文章自然可以评论, comment 记录文章评论,文章和评论关系就是一对多,一篇文章可以有多个评论。...在 comment 中有字段article 记录评论所属文章,文章和评论关系如下: article:id … … comment : id … … article_id 在 comment 中有关联...article article_id,所以在 Comment 模型是 belongsTo方法,在 Article 模型是hasMany方法 在文章模型 Article ,则可以有如下方法来关联评论...'(这里是关联字段名,这个例子就是 article_id 字段), ‘id'(对应关联模型主键,这里 id 是关联 article id)); } 对应在 Comment 模型,则可以有如下方法来关联文章...'(这里是关联字段名,这个例子就是 article_id 字段), ‘id'(对应关联模型主键,这里 id 是关联 article id)); } 以上这篇浅谈laravel orm 一对多关系

    1.9K31

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

    今天开始讲如何在 Laravel 操作数据库,Laravel 为我们提供了多种工具实现对数据库增删改查,在我们使用 Laravel 提供这些数据库工具之前,首先要连接到数据库。...随着应用访问量增长,对数据库进行读写分离可以有效提升应用整体性能,关于数据库层面的读写分离配置不属于本教程讨论范畴,我们这里只讨论应用层面如何在 Laravel 项目中配置读写分离连接。...,所以只能查出来我们在上一篇教程在读数据库插入记录。...其它配置项 除了上面提到数据库连接配置,config/database.php 配置文件还有一些其它配置项,你可以通过 migrations 配置项自定义数据库迁移名称,默认是 migrations...这一思想在 Laravel 配置无处不在,很多服务都支持配置多个连接提供不同驱动,比如 Session 支持文件、数据等连接,缓存支持 Memcached、Redis 等连接,队列支持数据库、Beanstalkd

    5.4K20
    领券