Laravel如何实现模型关联


本篇内容介绍了“Laravel如何实现模型关联”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一对一
一对一关联是目前存在的最基本的关联。这种关联意味着 A 模型只能链接到 B 模型,相反也是如此。举个例子,一个 User 模型和一个 Passport 模型会成为一对一的关联。一个用户只能拥有一张通行证,同样,一张通行证也只属于一个用户。让我们看看如何在代码中定义这种关联。在 User 模型中我们创建了一个 passport 方法。我们通过 hasOne 方法告诉 Laravel User 模型有一个 Passport 。注意:
所有用于定义关联的方法都有可选的额外参数,你可以在这些参数中定义本地键和外键。默认情况下,Laravel会假设你在用户模型中定义了 passport_id ,因为你试图创建与 passport 模型的关联。创建迁移文件时也请注意这一点!
在 Passport 模型中,我们需要定义逆向的关联。我们要让 Passport 模型知道它属于 User 模型。我们可以使用 belongsTo 方法来实现这一点。一对多
你可以在 Laravel 中定义的下一个关联是一对多关联。 这种类型的关联意味着一个类型A的模型可以链接到多个类型B的模型。但是类型B的模型只属于一个类型A的模型。例如,User 模型和 Invoice 模型之间的关联是一对多关联。 用户可以拥有多个账单,但账单仅属于一个用户。在代码中是这样写的:它看起来就像我们之前用于定义一对一关联的代码,对吧?我们现在要做的就是让 Invoice 模型知道它属于 User 模型。 让我们定义一对多关联的反向对应关联吧。多对多
最后要定义的关联是多对多关联。 这种类型的关联意味着类型A的一个模型可以链接到类型B的多个模型,反之亦然。例如,Invoice 模型和 Product 模型之间的关联将是多对多关联。 账单可以包含多个产品,而产品可以属于多个账单。你可以像这样定义这种关联的反向关系:多对多关联实现起来稍微困难一些,因为它们需要数据库中的中间表。 你可以通过创建迁移文件在 Laravel 中创建此中间表。远程关联
远程一对一
has one through 关联通过单个中间关联模型实现。 如果每个供应商都有一个用户,并且每个用户与一个用户历史记录相关联,那么供应商可以通过用户访问用户的历史记录。这就是定义这种关联所需的数据库表:即使 product_history 表不包含 supplier_id 列,供应商也可以通过使用 「has one through」 关系访问 product_history 记录。传递给 hasOneThrough免费云主机域名 方法的第一个参数是希望访问模型的名称。 第二个参数是中间模型的名称。远程一对多
「has many through」 关联相当于 「has one through」 关联,只是对于多个记录的。 让我们使用前面的示例,但我们改变一件事:产品现在可以有多个历史条目而不是一个。 数据库表保持不变。这样,供应商模型可以访问产品的历史记录条目。查询关联
查询一个关联非常简单。因为我们定义了 Passport 的一对一关联和 Invoice 的一对多关联,所以我们可以在 User 模型中使用它们。在 User 模型的每个实例上,我们都可以得到对应的 Passport 和 Invoice。也可以查询关联的反向关联。 如果您有账单,则可以获得该账单的用户。查询多对多关联的工作方式与其他关联完全相同。 此外,多对多关联有一个pivot 属性。 此属性表示中间表,可以像任何其他模型一样使用。举个例子,假设连接的表有 created_at 字段,我们就可以使用 pivot 来获取 created_at 字段。查询 has one through 和 has many through 的工作方式与其他关联完全相同。添加约束
可以在查询时向关系添加约束。看看下面的示例:检查关联是否存在
有时候你希望检查模型中是否有添加某些关联, Laravel有一些方法可以帮助你用来检查:“Laravel如何实现模型关联”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: archlinux罗技K380 F1-F12功能键锁定怎么实现

这篇文章主要讲解了“archlinux罗技K380F1-F12功能免费云主机域名键锁定怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“archlinux罗技K380F1-F12功能键锁定怎么实现”吧!在w…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/27 16:14
Next 07/27 16:32

相关推荐