Laravel在同一张表中包含了许多当前模型

Laravel在同一张表中包含了许多当前模型,laravel,eloquent,Laravel,Eloquent,我希望有一个方法(可能是渴望加载)返回通过user\u collection\u uuid连接的所有用户,包括当前用户。如果未设置user\u collection\u id,则至少应返回当前用户 我正在使用的方法(由于hasMany,会自动过滤空值): 如果直接调用该方法,但未加载渴望/延迟,则该方法有效: $user->userInCollection()->get()->count() // Collection count returns 1 下面的代码应该执行相同的

我希望有一个方法(可能是渴望加载)返回通过
user\u collection\u uuid
连接的所有用户,包括当前用户。如果未设置
user\u collection\u id
,则至少应返回当前用户

我正在使用的方法(由于
hasMany
,会自动过滤空值):

如果直接调用该方法,但未加载渴望/延迟,则该方法有效:

$user->userInCollection()->get()->count() // Collection count returns 1
下面的代码应该执行相同的操作,除非它是通过LazyLoading或WangerLoading解析的。但是,它返回0

$user->userInCollection->count() // Collection count returns 0
似乎调用HasMany方法的用户已从结果中筛选出来。 有没有其他方法可以做到这一点,或者我遗漏了什么?这是你想要的行为吗


Laravel 8.26.1

您不能在关系中使用
$this
上下文

最简单的方法是使用自定义属性:

    public function userInCollection(): HasMany
    { 
        return $this
           ->hasMany(User::class, 'user_collection_uuid', 'user_collection_uuid');
    }

    public function getUsersInCollectionAttribute()
    { 
        return $this->userInCollection->push($this);
    }


然后,您可以执行以下操作:

$user = User::with('userInCollection')->find($id);
$user->users_in_collection;

非常感谢。我认为您应该删除答案中的
或where
,因为您提到我不能在关系中使用
$this
。如果我正确理解代码。是的,我错了,我编辑了我的答案:)别忘了将答案标记为resolve:)
$user = User::with('userInCollection')->find($id);
$user->users_in_collection;