mysql - Laravel:使用别名将其他表列加入一行
问题描述
我想将一个月的多人轮班时间表与这些人员数据放在一起。
这是我的桌子。
karyawans table
schedules table
我能做的最好的事情是使用with
for 循环并对其进行迭代,然后像这样手动构建我的对象
$thisMonth = Carbon::create(request()->year, request()->month);
$firstday = $thisMonth->copy()->firstOfMonth();
$lastday = $thisMonth->copy()->lastOfMonth();
$schedules = Karyawan::with(['schedules' => function ($query) use ($firstday, $lastday) {
$query->whereBetween('tgl', [$firstday, $lastday]);
}])
->where('id_ruang', $karyawan->id_ruang)
->orderBy('nik', 'asc')->get();
foreach ($schedules as $s) {
$obj = new stdClass();
$obj->nik = $s->nik;
$obj->nama = $s->nama;
for ($i = 0; $i < $last; $i++) {
$obj->{'day' . ($i + 1)} = empty($s->schedules[$i]) ? null : $s->schedules[$i]->id_shift;
}
array_push($data, $obj);
}
这是输出
{
"nik": 1659,
"nama": "Muhammad Nando Hidayat",
"day1": 1,
"day2": 1,
"day3": 1,
"day4": 1,
"day5": 1,
"day6": 1,
"day7": 1,
"day8": 1,
"day9": 1,
"day10": 1,
"day11": 1,
"day12": 1,
"day13": 1,
"day14": 1,
"day15": 1,
"day16": 1,
"day17": 1,
"day18": 1,
"day19": 1,
"day20": 1,
"day21": 1,
"day22": 1,
"day23": 1,
"day24": 1,
"day25": 1,
"day26": 1,
"day27": 1,
"day28": 1,
"day29": 1,
"day30": 1,
"day31": 1,
},
这就是我想要的输出。但是是否有任何 laravel 查询方法可以在不使用 for 循环的情况下实现相同的目标?只是 laravel 查询
解决方案
推荐阅读
- flask - flask_socketio 客户端没有收到在另一个使用多进程的请求中处理的数据
- python - 如何将使用 Matplotlib 的 bar_label 创建的标签格式化为四舍五入的百分比?
- html - 如何使用 css 在 3d 空间中旋转 svg
- java - 在Java中将字符串键值映射转换为枚举键值
- python - libusb 找不到连接到计算机的特定设备
- sql - 访问,多个iif功能合二为一
- javascript - 如何使用 jQuery/Vanilla JS 在最后一个 childNode 之前删除 childNode 项?
- prolog - 更改 Prolog 中的输出 - 用于检测 covid 症状
- mysql - 我有一个名为 transactions 的 mysql 数据库,我试图在满足条件的地方附加一个值
- algorithm - 两个 3D 立方体/长方体之间的最小距离