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 并能在这个范围内找到日志吗?