laravel - 使用 orWhereHas laravel 雄辩查询检查数据是否存在于另一个表中
问题描述
我有两个表用户和出勤率。在出勤表中包含用户出勤 forpresent_date
和present_type
wise 。
present_type
留作轮班。如果轮班,用户可能有多个出席日期。由于这个原因,一个用户可能在考勤表中有很多行。我想显示所有用户并检查=>如果在特定日期找到了出勤并为用户输入未选中=>如果在循环视图中当天不存在出勤。
$userList = User::
orWhereHas('userAttendance', function ($q) use ($attDate,$type) {
$q->where('present_date', $attDate);
$q->wherePresentType($type);
})->get();
在刀片文件循环中:
@foreach($userList as $key => $user)
<input value="{{$user->id}}" title="" type="checkbox"
@if($user->userAttendance)
checked="checked" data-exist-id="{{$user->userAttendance->id}}"
@endif class="action-normal" />
但这并没有按预期工作。它会检查考勤表上是否存在行,而无需过滤orWhereHas
Clasure 中写入的日期或类型!
我想检查出勤表上是否存在特定日期的(如果 present_type 是不换班)数据,而无需进行其他查询以保持有限的数据库命中。
我可以通过在用户模型中创建一个函数来做到这一点,其中该函数从刀片文件 while 循环中获取参数。但我不想做额外的数据库查询。
有没有办法使用纯雄辩?我可以使用从控制器功能发送的数据在循环时为用户检查它吗?
解决方案
为什么是 orWhereHas ?
尝试这个:
$userList = User::query()
->with(['userAttendance' => function($q) use($attDate,$type) {
$q->where('present_date', $attDate);
$q->wherePresentType($type);
}])
->get();
最好加载关系,避免视图中的多个查询。
编辑:当条件满足时,这将为您提供所有用户并加载正确的 userAttendance 关系。
推荐阅读
- react-native - 我想知道如何在从 00:00:00 开始的本地反应中制作时钟计时器
- c# - 如何在单击“编辑”和“新建”时创建 GET 和 POST 方法“CreateOrEdit()”以重定向到 CreateOrEdit.cshtml?
- java - 如何在 VoltDB 中获取查询结果
- haskell - 如何制作偏函数?
- python - 为什么在交换之前查找索引而不是内联会改变结果?
- jquery - 我无法正确获得价值
- review-board - 将 reviewboard 2.x 升级到 3.x
- javascript - 如何将 Discord.js 和 twit 相互集成以在指定频道上进行实时 Twitter 提要
- python - 在 WHERE 子句中使用占位符查询记录是否存在
- node.js - Node.js Streams readable.readableLength 不返回文件大小