Eloquent Laravel 5.1 中时间戳的 where 子句
Eloquent where clause for timestamp in Laravel 5.1
我有一个 table 和搜索栏。
当用户在搜索中输入时,当我抓取它并查询我的数据库时。
这就是我得到的
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());
}
结果
在网络选项卡中,我不断收到
Undefined function: 7 ERROR: operator does not exist: timestamp without time zone ~~ unknown
如何进一步调试它?
清理您的输入以避免此类问题
$remove = array("'","!",";","+",'|','||',"&&","}","{","[","]");
$replace = array("","","","","","","","","","","");
$q = str_replace($remove, $replace, $q);
在您的 queris
中使用新定义的 $q
PostgreSQL 对不同的数据类型很严格。将时间戳列转换为文本:
->orWhereRaw('created_at::text like ?', ['%'.$q.'%'])
调试的第一步,由 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 并能在这个范围内找到日志吗?
我有一个 table 和搜索栏。
当用户在搜索中输入时,当我抓取它并查询我的数据库时。
这就是我得到的
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());
}
结果
在网络选项卡中,我不断收到
Undefined function: 7 ERROR: operator does not exist: timestamp without time zone ~~ unknown
如何进一步调试它?
清理您的输入以避免此类问题
$remove = array("'","!",";","+",'|','||',"&&","}","{","[","]");
$replace = array("","","","","","","","","","","");
$q = str_replace($remove, $replace, $q);
在您的 queris
中使用新定义的 $qPostgreSQL 对不同的数据类型很严格。将时间戳列转换为文本:
->orWhereRaw('created_at::text like ?', ['%'.$q.'%'])
调试的第一步,由 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 并能在这个范围内找到日志吗?