gpt4 book ai didi

php - Laravel hasOne 通过数据透视表

转载 作者:行者123 更新时间:2023-12-01 10:31:24 26 4
gpt4 key购买 nike

所以我有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 个表、用户、配置文件和 user_profiles(数据透视表)

我的用户表中有一个名为 active_profile 的列其中填充了个人资料 ID。

我如何建立关系,以便我可以调用以下内容:
$user->active_profile
以便它将返回active_profile中设置的id的所有配置文件信息?

最佳答案

在 Laravel 5.8 上,因为我想将它与 一起使用急切加载 我使用了这个包:
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);
}

}

然后在我的 用户 模型使用 staudenmeir 的包:
<?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()$user->latestPhoto
编辑:
在另一个问题中,有人在不使用包的情况下问了同样的问题。
我也提供了 an answer这将产生相同的结果。

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

关于php - Laravel hasOne 通过数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42033777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com