【问题标题】:Laravel: Select raw query with filter doesnt return anythingLaravel:选择带有过滤器的原始查询不返回任何内容
【发布时间】:2020-04-07 05:28:19
【问题描述】:

之前我可以正常显示数据,这里还是没有过滤器,这是我的代码和结果。

代码:

$app =  DB::select(DB::raw("
    select
        pel.id as id_pelamar,
        nm_pelamar as nama_pelamar,
        nm_rs as rumah_sakit,
        nm_unit as unit,
        nm_jabatan as jabatan,
        pel.tgl_lahir as tgl_lahir,
        his.status as status,
        pel.tanggal_ins as tanggal
    from (SELECT MAX(id) AS id_tr, id_pelamar FROM t_history_pelamar GROUP BY id_pelamar) x 
        inner join t_history_pelamar his on his.id=x.id_tr
        right join t_pelamar pel on pel.id=his.id_pelamar
        inner join m_rumah_sakit rs on rs.kd_rs=pel.kd_rs
        inner join m_unit u on u.kd_unit=pel.kd_unit 
        inner join m_jabatan j on j.kd_jabatan=pel.kd_jabatan 
    "));

结果:

我添加过滤器后,没有数据显示。

$nm_rs = '';
$from = '2020-04-01 00:00:00+07';
$until = '2020-05-01 024:00:00+07';
$name  = '';

$app =  DB::select(DB::raw("
    select
        pel.id as id_pelamar,
        nm_pelamar as nama_pelamar,
        nm_rs as rumah_sakit,
        nm_unit as unit,
        nm_jabatan as jabatan,
        pel.tgl_lahir as tgl_lahir,
        his.status as status,
        pel.tanggal_ins as tanggal
    from (SELECT MAX(id) AS id_tr, id_pelamar FROM t_history_pelamar GROUP BY id_pelamar) x 
        inner join t_history_pelamar his on his.id=x.id_tr
        right join t_pelamar pel on pel.id=his.id_pelamar
        inner join m_rumah_sakit rs on rs.kd_rs=pel.kd_rs
        inner join m_unit u on u.kd_unit=pel.kd_unit 
        inner join m_jabatan j on j.kd_jabatan=pel.kd_jabatan 
    where
        (nm_rs = :nm_rs) AND 
        (pel.tanggal_ins BETWEEN :from AND :until) AND
        (nm_pelamar like :name)
    "), ["nm_rs" => $nm_rs, "from" => $from, "until" => $until, "name" => "%".$name."%"]
    );
return json_encode($app);

谢谢。

【问题讨论】:

  • 您有 0 条记录符合您的 where 子句。为了调试,我会通过一一删除它们来查明哪个 where 语句导致空结果集。 nm_rsname 为空。你有那些字段为空值的记录吗?
  • 确保“nm_rs”和“name”字段中有空白字符串,因为您将其初始化为空白并传递给查询。
  • 我没有一条值为null的记录,但是如果没有来自$nm_rs或者其他什么的请求,就意味着所有的数据都会出现没有过滤器。
  • 嗯,我会从哪里一一检查,缩小调试过程,谢谢
  • 它已解决,当我需要 ewquest 的空值时,我忘记在每种情况下添加 like (not '=') ..

标签: php postgresql laravel-5.8


【解决方案1】:

[已解决]

  1. 当我需要请求的空值时,我忘记在每种情况下添加like(不是'=')。
  2. 我从时间戳转换为日期,这里我使用了 PostgreSql

这是我的代码:

$nm_rs = '';
$from = '2019-11-28';
$until = '2020-04-02';
$name  = '';

$app =  DB::select(DB::raw("
    select
        pel.id as id_pelamar,
        nm_pelamar as nama_pelamar,
        nm_rs as rumah_sakit,
        nm_unit as unit,
        nm_jabatan as jabatan,
        pel.tgl_lahir as tgl_lahir,
        his.status as status,
        pel.tanggal_ins as tanggal
    from (SELECT MAX(id) AS id_tr, id_pelamar FROM t_history_pelamar GROUP BY id_pelamar) x 
        inner join t_history_pelamar his on his.id=x.id_tr
        right join t_pelamar pel on pel.id=his.id_pelamar
        inner join m_rumah_sakit rs on rs.kd_rs=pel.kd_rs
        inner join m_unit u on u.kd_unit=pel.kd_unit 
        inner join m_jabatan j on j.kd_jabatan=pel.kd_jabatan 
    where
        (nm_rs like :nm_rs) AND 
        (pel.tanggal_ins::timestamp::date >= :from AND pel.tanggal_ins::timestamp::date <= :until) AND
        (nm_pelamar like :name)
    "), [
        "nm_rs" => "%".$nm_rs."%", 
        "from" => "%".$from."%", 
        "until" => "%".$until."%", 
        "name" => "%".$name."%"
]);

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    相关资源
    最近更新 更多