Laravel 5.1中时间戳的雄辩的where子句

时间:2018-10-29 18:22:16

标签: php laravel laravel-5 eloquent laravel-5.1

我有一张桌子和搜索栏。

enter image description here

当用户在搜索中输入时,即表示我抓取并查询数据库。

这就是我得到的

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错误:运算符不存在:没有时区的时间戳~~未知

enter image description here

如何进一步调试呢?

3 个答案:

答案 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并在此范围内找到日志吗。