我有一个分页列表页面的查询。 SELECT和WHERE部分的某些部分是原始查询。为了避免sql vularabilities,我需要为此查询使用参数绑定。它适用于WhereRaw查询但在SELECT部分中不起作用。
请在此处查看我的查询:
$aJob = JobKeywords::where('job_keywords.status', 1)
->where('job_keywords.expiry_date', '>=', $today);
whereRaw('MATCH(job_title,company_name,skills) AGAINST (? IN BOOLEAN MODE) > 0', [$keyword])
->select([DB::Raw('job_keywords.job_id as job_id, ? as candidate_id, 1 as fts_search', [$candidateId]),"job_keywords.location as job_location_name",
DB::raw('MATCH(job_title,company_name,skills) AGAINST (? IN BOOLEAN MODE) as score', [$keyword]),
"job_keywords.company_name",
"job_keywords.job_id as id","job_keywords.job_title",
"job_keywords.skills",
"job_keywords.expiry_date",
"job_keywords.monthly_salary_range_min","job_keywords.monthly_salary_range_max",
'job_keywords.min_experience_in_year',
'job_keywords.metadata'])
->orderBy('score', 'DESC')
->paginate(10);
在WhereRaw
中的参数绑定工作正常但在Select(DB::Raw)
内部不起作用。它会抛出SQLSTATE[HY093]: Invalid parameter number error
。如果我们调试print_r($aJob->toSql()) and print_r($aJob->getBindings())
然后你可以看到参数inside DB::raw
不计算。
有没有人对此有任何想法?
你试过selectRaw吗?
$orders = DB::table('orders')
->selectRaw('price * ? as price_with_tax', [1.0825])
->get();`