【问题标题】:Can't get data when change Raw Query to Query Builder in Laravel在 Laravel 中将原始查询更改为查询生成器时无法获取数据
【发布时间】:2019-08-12 04:18:28
【问题描述】:


我有一个这样的原始查询:

$sql = DB::select("SELECT * FROM act_hi_procinst WHERE ID_ LIKE '%$searchValue%' 
                                                        OR PROC_INST_ID_ LIKE '%$searchValue%' 
                                                        OR PROC_DEF_ID_ COLLATE utf8_unicode_ci LIKE '%$searchValue%' 
                                                        OR START_TIME_ LIKE '%$searchValue%' 
                                                        OR END_TIME_ LIKE '%$searchValue%' 
                                                        OR DURATION_ LIKE '%$searchValue%' 
                                                        OR START_USER_ID_ COLLATE utf8_unicode_ci LIKE '%$searchValue%' 
                                                        OR START_ACT_ID_ COLLATE utf8_unicode_ci LIKE '%$searchValue%' 
                                                        OR END_ACT_ID_ COLLATE utf8_unicode_ci LIKE '%$searchValue%' 
                                                        OR SUPER_PROCESS_INSTANCE_ID_ LIKE '%$searchValue%'");

但是如果我使用它,我就不能在我的查询中使用分页功能。所以我决定把它改成这样的查询生成器:

$sql = DB::table('act_hi_procinst')
                ->where('ID_', 'like', '%$searchValue%')
                ->orWhere('PROC_INST_ID_', 'like', '%$searchValue%')
                ->orWhere('PROC_DEF_ID_', 'like', '%$searchValue%')
                ->orWhere('START_TIME_', 'like', '%$searchValue%')
                ->orWhere('END_TIME_', 'like', '%$searchValue%')
                ->orWhere('DURATION_', 'like', '%$searchValue%')
                ->orWhere('START_USER_ID_', 'like', '%$searchValue%')
                ->orWhere('START_ACT_ID_', 'like', '%$searchValue%')
                ->orWhere('END_ACT_ID_', 'like', '%$searchValue%')
                ->orWhere('SUPER_PROCESS_INSTANCE_ID_', 'like', '%$searchValue%')
                ->get();

当我运行它时,它不返回任何数据。我使用 getQueryLog() 并看到这个:

数组:1 [▼ 0 => 数组:3 [▼ "query" => "select * from act_hi_procinst where ID_ like ? or PROC_INST_ID_ like ? or PROC_DEF_ID_ like ? or START_TIME_ like ? or END_TIME_ like ? or `DURATION ▶" “绑定” => 数组:10 [▼ 0 => "%$searchValue%" 1 => "%$searchValue%" 2 => "%$searchValue%" 3 => "%$searchValue%" 4 => "%$searchValue%" 5 => "%$searchValue%" 6 => "%$searchValue%" 7 => "%$searchValue%" 8 => "%$searchValue%" 9 => "%$searchValue%" ] “时间”=> 4.0 ] ]

我该如何解决?
非常感谢!

【问题讨论】:

  • 重新检查参数值:'%$searchValue%'
  • @Tomato 您需要将值放在双引号中("),或者您可以根据需要将它们连接起来。

标签: mysql laravel


【解决方案1】:

尝试将where('ID_', 'like', '%$searchValue%') 替换为where('ID_', 'like', '%' .$searchValue . '%') 并将其应用于所有其余部分

【讨论】:

  • 它正在工作!非常感谢!这种方式没有文件。
  • 它不是特定于文档@Tomato。这是您尝试传递所需价值的方式所犯的错误。在您的第一个原始查询中,您使用了双引号,它允许您传递一个变量,该变量将解析为它所包含的值,在查询生成器上您使用了单引号字符串。
  • @Tomato 是的,我必须面对与您相同的问题,才能了解应该如何完成。很高兴为您提供帮助,请尽可能将答案标记为正确
猜你喜欢
  • 2021-12-11
  • 2023-01-14
  • 2021-12-26
  • 2020-10-11
  • 2015-12-13
  • 2016-03-09
  • 2019-11-03
  • 1970-01-01
  • 2014-02-15
相关资源
最近更新 更多