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;