Laravel hasOne 通过数据透视表

2024-04-06

所以我有2种模式,User和Profile,关系设置如下:

    /**
     * User belongs to many Profile
     *
     * @return \Illuminate\Database\Eloquent\Relations\belongsToMany
     */
    public function profiles()
    {
        return $this->belongsToMany('App\Models\Profile', 'user_profiles');
    }

我有 3 个表、用户、配置文件和用户配置文件(数据透视表)

我的用户表中有一个名为active_profile其中填充有配置文件 ID。

我怎样才能建立关系,以便我可以调用如下所示的内容:

$user->active_profile

这样它就会返回active_profile中设置的id的所有配置文件信息?


在 Laravel 5.8 上,因为我想将它与急切加载我用了这个包:https://github.com/staudenmeir/eloquent-has-many-deep https://github.com/staudenmeir/eloquent-has-many-deep

这是我的场景
可以在多张照片上标记一个用户,并且一张照片可以有许多用户标记。我想建立一种关系来获取用户被标记的最新照片。

我认为我的场景也可以应用于任何多对多关系

我做了枢轴模型用户照片

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Relations\Pivot;

class UserPhoto extends Pivot
{

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function photo()
    {
        return $this->belongsTo(Photo::class);
    }

}

然后在我的User模型使用施陶登梅尔的包裹:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Staudenmeir\EloquentHasManyDeep\HasRelationships;

class User extends Model
{
    use HasRelationships;

    public function photos()
    {
        return $this->belongsToMany(Photo::class);
    }

    public function latestPhoto()
    {
        return $this->hasOneDeep(Photo::class, [UserPhoto::class])
            ->latest();
    }
}

然后我可以轻松地做这样的事情:

User::with('latestPhoto')->get() and $user->latestPhoto


编辑: 在另一个问题中,有人在没有使用包的情况下问了同样的问题。 我还提供了一个答案 https://stackoverflow.com/a/59303547/8068675这会产生相同的结果。

但深入挖掘之后,从这两个答案中,您可以避免 n+1 查询,您仍然会水合来自您请求的用户的所有照片。我认为不可能避免其中一种方法。不过,缓存可能是一个答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel hasOne 通过数据透视表 的相关文章

随机推荐

  • vim :AnsiEsc - 如何默认打开它们?

    我有带有彩色日志条目的日志文件 假设扩展名为 smt2 其中颜色由 ansi 转义码定义 我安装了vim插件基于AnsiEsc vim http www vim org scripts script php script id 302 现在
  • awk 解析文件名并将结果添加到每行末尾

    我有许多名称相似的文件 例如 DWH Export AUSTA 20120701 20120731 v1 1 csv 397 dat 2012 10 02 04 01 46 out DWH Export AUSTA 20120701 201
  • 人类友好的二进制编码

    不久前 我发现一个网站描述了一种对人类友好的二进制到文本编码 例如 在输入 用于解码 时 它接受 0 o 和 O 全部作为相同的值 因为人们往往很容易混合这些字符 不幸的是我不记得它是怎么叫的 编辑 这就是我正在寻找的 其他Base32 的
  • retq 和 ret 有什么区别?

    让我们考虑以下程序 它计算参数的无符号平方 global foo text foo mov rdi rax mul rdi ret 这是正确编译的as 但反汇编为 0000000000000000
  • 如何设置iPhone振动时长?

    我正在使用 AudioServicesPlaySystemSound 来调用振动函数 AudioServicesPlaySystemSound kSystemSoundID Vibrate 有什么办法可以设置振动的持续时间吗 我知道默认持续
  • ASP .NET 5 MVC 6 Identity 3 角色声明组 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在寻找一种解决方案 以在带有 Identity 3 的 ASP NET 5 MVC 6 中使用高级角色 组权限管理 我启动了一
  • Spring MVC 返回自定义 HTTP 状态代码(无错误)

    在 Spring MVC RequestMapping 注释中 我返回 JSP 页面名称作为结果 这将返回 HTTP 状态代码 200 OK 如何将此状态代码更改为 201 创建之类的内容 ResponseStatus 不起作用 另外 Ht
  • JPA:如何对实体中的 Set 字段进行排序?

    我正在使用 Spring 3 2 11 RELEASE Hibernate 4 3 6 Final 和 JPA 2 1 我有以下具有以下字段的实体 Entity Table name user public class User imple
  • 如何在 Spring MVC 中将正确的 JSON 传递给控制器​​?

    我不明白为什么在将 POST 请求传递给时会收到 HTTP 415http localhost 8080 company 我在 POST 请求中的 JSON id 7 name IBM 这是我在控制器中的方法 Controller Requ
  • 为什么在 swift 中创建 String 时会出现内存泄漏?

    泄漏是一个根漏 在此图像中 在同一行上发生了多次 但下面还有另一个称为单次 也会产生泄漏 这是调用堆栈after调用前面提到的代码行 这是 Instruments 定位泄漏的类 class Item var id String var na
  • 为什么我的 schema.ddl 在 hibernate3-maven-plugin 之后是空的?

    这是项目的目录结构 使用maven2 pom xml src main java Abc java resources hibernate cfg xml database properties META INF persistence x
  • 公共属性和私有成员 C#

    只使用公共属性而不是使用公共属性来访问私有变量有什么好处 例如 public int iMyInt get set 代替 private int myint public int iMyInt get return myint set my
  • GET 或 POST 哪个比另一个更安全?

    当比较 HTTP GET 和 HTTP POST 时 从安全角度来看有什么区别 其中一种选择本质上比另一种更安全吗 如果是这样 为什么 我意识到 POST 不会公开 URL 上的信息 但是这有什么真正的价值 还是只是通过模糊来实现安全 当考
  • 即使对于小型 DbContext,EF 启动时间也为 7 秒

    我正在尝试减少基于 EF 的应用程序的启动时间 但我发现即使对于单实体上下文 我也无法将初始读取所需的时间减少到 7 秒以下 特别奇怪的是 这次不是特定于上下文类型的 谁能解释一下导致这些缓慢时间的原因和 或我如何才能让事情运行得更快 这是
  • IIS 配置 - ASP.NET MVC 对所有请求返回默认文档

    好的 我在 VS 2013 中构建了一个 MVC Web 应用程序 我已经能够通过本地计算机上的 IIS 成功托管该应用程序 没有任何问题 但是我现在需要在远程计算机上托管 我遵循了与在本地计算机上相同的步骤 但我不断收到错误 当我尝试浏览
  • 乘以 unsigned Short 会导致未定义的行为吗?

    作为 的后续行动 https stackoverflow com questions 33732041 why static castunsigned intushrt maxushrt max yields Correct value h
  • NSManagedObject 中的可变集?

    自动生成的标准声明NSManagedObjectproperty 声明了这样的多对多关系 property nonatomic retain NSSet somethings dynamic somethings 将该声明更改为安全吗 NS
  • Processing.js 定时器

    我正在使用Processing js 开发一个应用程序 在绘图循环的每一步 我都会将帧数增加一frame 我想知道已经过去了多少时间 目前为了获取时间 知道我的应用程序设置为以 60FPS 运行 我确实这样做 time frame 60 但
  • Laravel cookie::forget 不起作用?

    我有这个代码 Cookie forget vendor return Redirect route vendor login 它应该做的是删除供应商 cookie 并将您重定向到登录页面 然而 它实际上并没有删除 cookie 根据我的理解
  • Laravel hasOne 通过数据透视表

    所以我有2种模式 User和Profile 关系设置如下 User belongs to many Profile return Illuminate Database Eloquent Relations belongsToMany pu