【问题标题】:Laravel relationship between 3 tables where 2 are connected via pivot3个表之间的Laravel关系,其中2个通过枢轴连接
【发布时间】:2022-11-03 00:44:59
【问题描述】:

我是 Laravel 的新手,已经在寻找类似的线程,但我没有找到任何东西。 我想使用 Eloquent,我得到了 3 个模型和表格:测试系列、设备和用户。

用户与设备有多对多的关系。 (一个用户有很多设备,反之亦然) 设备与测试系列有一对多的关系。 (一个设备有许多测试系列,许多测试系列有一个设备)

** 表结构用户:**

id
username

表结构设备:

id
serial_number <-- its a string, not important for the structure

表结构测试系列:

id
device_id

设备和用户通过 Pivot 连接

设备用户:

id
user_id
device_id

如果用户登录,我想显示连接到用户的所有设备的所有测试系列。

我在用户模型中定义:

public function devices(): \Illuminate\Database\Eloquent\Relations\BelongsToMany {
    return $this->belongsToMany(Device::class);
}

在设备模型中:

public function users(): \Illuminate\Database\Eloquent\Relations\BelongsToMany {
    return $this->belongsToMany(User::class);
}

public function testseries(): \Illuminate\Database\Eloquent\Relations\HasMany {
    return $this->hasMany(Testserie::class);
}

有什么方法可以在用户模型中创建可以轻松访问测试的功能?

如果有人不明白我想要什么,因为我的英语不好。这个函数应该告诉我在用户模型中想要什么:

public function testseries() {
    return $this->devices()->testseries();
}

我还希望一次查询所有测试系列。

我尝试了每种方法。但它为每个设备做一个对测试的查询。

我也尝试了 with 方法。它可以工作,但是我想要 Testseries 表中的所有列,但是我必须告诉数组中的所有表名,并且我不想要 Devices 表中的列。

当我调用 ->get 方法时,我希望得到一个查询,我将通过一个查询一次获取所有 Testseries。

【问题讨论】:

    标签: laravel database eloquent eloquent-relationship


    【解决方案1】:

    尝试这个 :

    Auth::user()->with('devices.testseries')->get();
    

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 2023-03-10
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 2021-01-07
      相关资源
      最近更新 更多