gpt4 book ai didi

php - Laravel - 使用 hasManyThough() 和唯一合并的动态关系

转载 作者:行者123 更新时间:2023-12-01 19:03:51 24 4
gpt4 key购买 nike

我可以想到几种临时方法来做到这一点,但我确实在寻找“最佳实践”类型的解决方案。

我涉及 3 个表
- 用户(user_id)
- 用法('user_id'、'provider_id'、'nurse_id'、'patent_id')
-usage_alerts('usage_id')

我尝试根据用户的角色使用 hasManyThrough() 预先加载警报

user_id 字段是不可知的,可以应用于任何角色,因此需要进行合并和过滤。

使用 $this->hasManyThrough('UsageAlert', 'Usage')->get() 将返回一个集合,从而使 ->merge() 方法可用的。但是,当急切加载时,返回时,我收到错误,因为它是集合对象。

Call to undefined method Illuminate\Database\Eloquent\Collection::addEagerConstraints()

例如,这是我当前的关系(返回上面的错误)

public function alerts() 
{

$alerts = $this->hasManyThrough('UsageAlert', 'Usage')->get();

if(Sentry::getUser()->inGroup(Sentry::findGroupByName('provider')))
$alerts->merge($this->hasManyThrough('UsageAlert', 'Usage', 'provider_id'));

if(Sentry::getUser()->inGroup(Sentry::findGroupByName('patient')))
$alerts->merge($this->hasManyThrough('UsageAlert', 'Usage', 'patient_id'));

if(Sentry::getUser()->inGroup(Sentry::findGroupByName('nurse')))
$alerts->merge($this->hasManyThrough('UsageAlert', 'Usage', 'nurse_id'));

return $alerts;

}

有什么建议吗?
也许关系太复杂了?

最佳答案

最佳实践是操纵这种关系的,尽管缺乏关于如何操纵这种关系的官方文档。对于您的场景,您可以将其他查询联合到主要的“不可知”关系中:

$relation = $this->hasManyThrough('UsageAlert', 'Usage');

foreach (['provider','patient','nurse'] as $group) {
if (Sentry::getUser()->inGroup(Sentry::findGroupByName($group))) {
$relation->getBaseQuery()->union(
$this->
hasManyThrough('UsageAlert', 'Usage', $group . '_id')->
getBaseQuery()->
select('UsageAlert.*') // limits union to common needed columns
);
}
}

return $relation;

此方法返回一个Relation,而不是 API 用户所期望的Collection

关于php - Laravel - 使用 hasManyThough() 和唯一合并的动态关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25577954/

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