使用链式方法的 Laravel 复杂范围查询
Posted
技术标签:
【中文标题】使用链式方法的 Laravel 复杂范围查询【英文标题】:Laravel Complex Scope Query using chain method 【发布时间】:2021-09-03 23:59:59 【问题描述】:我想在第二种方法中使用whereHas
查询的user id
。我怎样才能做到这一点?
public function scopeloadAvailableAgents($query)
return $query->whereHas('roles', function($q)
$q->where("name", "agent");
)
->whereNotIn('id', function($q) use (/* i want to use user_id of where has query */)
$q->select('user_id')
->from(with(new UserToManager())->getTable())
->where('user_id', $user_id);
)
->get();
编辑:
memeber
是一个错字.. 它将是 agent
。我在表agent_to_manager
上,我想只获取agent_to_manager
表中不存在的代理角色用户。我有两个查询,一个只获取代理角色用户,第二个检查提取的用户在哪里不存在agent_to_manager
table.. 但我无法获得 whereHas 查询的结果来运行第二个查询
【问题讨论】:
嗨,@Amiyo,你能更好地说明你想要实现什么吗?也许你可以描述模型之间的关系。 如果我理解“可用代理”是所有角色的用户。名称等于成员,但 user.id 不能等于 $user_id。用户和角色之间有什么关系吗? @ViníciusFagundes 抱歉member
是一个错字.. 将有两个查询.. 一个将获取角色为 agent
的用户,然后第二个查询将检查 id
s 是否存在agent_to_managers
表..
好的!但是,请多描述一下当前模型(具有此范围方法),它的用户模型?和 UserToManager 模型,你能描述得更好吗?我猜 UserToManager 属于用户,而用户有一个 UserToManager。如果是这样,答案可能很简单。
换句话说,您基本上想要返回所有available agents
,这意味着所有具有agent
角色但当前不在agent_to_manager
中的用户。但我现在需要了解具有作用域函数的模型和 UserToManager 模型之间的关系。
【参考方案1】:
public function scopeloadAvailableAgents($query, $managerId)
return $query->whereNotIn('id', function($q) use ($managerId)
$q->select('user_id')
->from(with(new UserToManager())->getTable())
->where('manager_id', $managerId);
)
->whereHas('roles', function($q)
$q->where("name", "agent");
)->get();
【讨论】:
以上是关于使用链式方法的 Laravel 复杂范围查询的主要内容,如果未能解决你的问题,请参考以下文章