php - 获取所有具有特定关系的模型
问题描述
在我的 Laravel 应用程序中,我正在构建一个过滤器功能。您可以通过选择模型 A 与模型 B 应具有的关系类型来过滤模型 A。模型 A 与模型 B 具有多对多关系。例如,模型 A1 与模型 B1、B2、B3、模型A2 与 B2、B3 有关系,模型 A3 与模型 B3 有关系。
如果您在过滤器模型 A1 中仅选择 B3,则应显示 A2 和 A3。如果您选择 B3 和 B2,则只会显示 A1 和 A2。
有没有办法解决这个问题以及如何解决?我不知道我的例子是否清楚,如果没有,请告诉我。
我尝试whereHas
执行以下操作:
$gyms = Gym::whereHas('facilities', function (Builder $query) use ($facilities) {
$query->whereIn('id', $facilities);
})->get();
问题是,如果我想要所有拥有设施 1 和设施 2 的健身房,它会显示只有设施 1 或设施 2 的健身房,但我需要同时拥有这两个设施的模型。
Gym 是我的示例中的模型 A,而 Facility 是模型 B。$facilities
是一组 Facility ID。
解决方案
要在 Laravel 中有一个“where in”子句,方法是whereIn()。
$gyms = Gym::whereHas('facilities', function (Builder $query) use ($facilities) {
$query->whereIn('facilities.id', $facilities);
})->get();
id
以上将返回与数组中的一个或多个 s 匹配的结果。如果您只想返回包含数组中所有 id 的匹配项,您可以使用以下的第 3 个和第 4 个参数指定whereHas()
:
$gyms = Gym::whereHas('facilities', function (Builder $query) use ($facilities) {
$query->whereIn('facilities.id', $facilities);
}, '=', count($facilities)) //<-- This bit
->get();
以上假设没有任何重复id
的 '$facilities
并且所有id
' 都存在于数据库中。
推荐阅读
- android - 实施 Google Assistant 语音命令支持
- python - 如何在句子中颠倒位置?
- javascript - 我的节点 js 代码对关键字“require”没有影响
- html - 如何制作嵌入式视频的直接下载链接
- asp.net-core - 将“ui_locale”返回给客户端
- xpath - XPath 选择器返回一个空列表而不是目标值
- nestjs - 将实体从库项目加载到 TypeORM OrmConfig 到应用程序项目
- javascript - 将人重定向到另一个页面后执行点击功能
- javascript - 从同一路线获得过滤后的产品。节点,猫鼬,MongoDB
- authentication - 微服务中的身份验证:每个用户一个会话