我有一张桌子和搜索栏。
当用户在搜索中输入时,即表示我抓取并查询数据库。
这就是我得到的
public function getLogsFromDb($q = null) {
if (Input::get('q') != '') {
$q = Input::get('q');
}
$perPage = 25;
if ($q != '') {
$logs = DB::table('fortinet_logs')
->orWhere('account_id', 'like', '%'.$q.'%')
->orWhere('cpe_mac', 'like', '%'.$q.'%')
->orWhere('p_hns_id', 'like', '%'.$q.'%')
->orWhere('g_hns_id', 'like', '%'.$q.'%')
->orWhere('data', 'like', '%'.$q.'%')
->orWhere('created_at', 'like', '%'.$q.'%') <----
->orderBy('updated_at', 'desc')->paginate($perPage)
->setPath('');
//dd($logs);
$logs->appends(['q' => $q]);
} else {
$logs = DB::table('fortinet_logs')
->orderBy('created_at', 'desc')->paginate($perPage)
->setPath('');
}
return view('telenet.views.wizard.logTable', get_defined_vars());
}
在“网络”标签中,我一直在获取
未定义函数:7错误:运算符不存在:没有时区的时间戳~~未知
如何进一步调试呢?
答案 0 :(得分:2)
PostgreSQL对不同的数据类型非常严格。将时间戳列转换为文本:
->orWhereRaw('created_at::text like ?', ['%'.$q.'%'])
答案 1 :(得分:1)
清理您的输入内容以避免此类问题
$remove = array("'","!",";","+",'|','||',"&&","}","{","[","]");
$replace = array("","","","","","","","","","","");
$q = str_replace($remove, $replace, $q);
在您的 queris
中使用新定义的 $ q答案 2 :(得分:0)
第一步是通过tihs调试SQL。您会发现查询的问题是什么。 像这样:
dd($logs = DB::table('fortinet_logs')
->orWhere('account_id', 'like', '%'.$q.'%')
->orWhere('cpe_mac', 'like', '%'.$q.'%')
->orWhere('p_hns_id', 'like', '%'.$q.'%')
->orWhere('g_hns_id', 'like', '%'.$q.'%')
->orWhere('data', 'like', '%'.$q.'%')
->orWhere('created_at', 'like', '%'.$q.'%')//This is the cri
->orderBy('updated_at', 'desc')->toSql());
这为您显示此查询的问题。 顺便说一句,您可以将$ q强制转换为daterange并在此范围内找到日志吗。