【问题标题】:How to use if-else on where clause如何在 where 子句中使用 if-else
【发布时间】:2021-09-19 10:44:34
【问题描述】:

我试图弄清楚当 lingkup 等于“desa”时如何在 where 子句中使用 if-else。 Where 子句仅 status = valid 但当 lingkup 为“kecamatan”时 where 子句 status = valid 且 status_kecamatan = valid。

$results = DB::table('tb_lapak')
    ->select('tb_surat.lingkup', 'tb_lapak.*')
    ->join('tb_surat', 'tb_lapak.kode_surat', '=', 'tb_surat.kode_surat')
    ->when('lingkup' === 'desa', function ($query) {
        return $query->where('status', '=', 'valid');
    })
    ->when('lingkup' === 'kecamatan', function ($query) {
        return $query->where('status', '=', 'valid');
        return $query->where('status_kecamatan', '=', 'valid');
    });

这是桌子

CREATE TABLE `tb_lapak` (
  `kode_lapak` int(11) NOT NULL,
  `kode_surat` int(11) NOT NULL,
  `tanggal` char(35) NOT NULL,
  `nik` char(35) NOT NULL,
  `keterangan` text NOT NULL,
  `status` enum('proses','valid') NOT NULL,
  `status_kecamatan` enum('proses','valid') NOT NULL,
  `create_at` timestamp NULL DEFAULT current_timestamp(),
  `kode_lingkup` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `tb_surat` (
  `kode_surat` int(11) NOT NULL,
  `lingkup` enum('kecamatan','desa') NOT NULL,
  `nama_surat` varchar(225) NOT NULL,
  `output` varchar(225) DEFAULT NULL,
  `aktif` enum('Y','T') NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

【问题讨论】:

  • ok 谢谢你的建议
  • 我已经编辑了表格
  • 这是一个小提琴dbfiddle.uk/… ..你能更新它并输入一些示例数据吗?还要编辑最后一部分,它被标记为预期输出。完成后,只需单击顶部的“运行”按钮,它将生成一个新链接。将该新链接粘贴到您的问题中。谢谢
  • 它已通过以下答案解决。谢谢先生的建议

标签: mysql laravel-8


【解决方案1】:

这可能不需要样本数据,只是一个逻辑问题

where (lingkup = 'desa' and status = 'valid')
   or (lingkup = 'kecamatan' and status = 'valid' and status_kecamatan = 'valid')
   or (lingkup not in ('desa', 'kecamatan'))

【讨论】:

  • 非常感谢先生。解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 2020-12-13
  • 2013-03-18
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多