laravel选择查询创建动态列名不起作用



我正在尝试Laravel联接查询来动态选择列,但下面的行返回错误。

\DB::raw('table3.ElrA'.($effectiveYear'.-YEAR(table1.eff_date(.'(

表3的列如下ElrA1、ElrA2。。。。。公共部分是";ElrA";我只是动态地制作尾部数字来创建整个列名,但它会给我带来错误,比如";ElrA202 YEAR(表3.eff_date(不是列";。你能提出一些解决方案吗。

$query = DB::table('table1')
->join('table2', function($join) {
$join->on('table2.policy_period_id', '=', 'table1.id');
$join->where('status','1');
})
->leftjoin('table3', function($join) use($effective_date)
{                       
$join->on('table3.class_code', '=', 'table2.code');
$join->where('table3.date', '=', DB::raw("(select max(`date`) from table3 where date <= '".$effective_date."' limit 1)"));
})
->select(DB::raw('table3.ElrA'.($effectiveYear'.-YEAR(table1.eff_date).')))                    
->where('table1.mod_id',$id);

感谢

当您查看错误代码时,它清楚地表明laravel试图找到列ElrA202 YEAR(table3.eff_date(

发生的事情是因为你在这一部分犯了错误

'table3.ElrA'.($effectiveYear'.-YEAR(table1.eff_date).'

确切的部分在这个中

'.-YEAR(table1.eff_date).'

因为您使用",它将被解析为字符串,而不是您想要的变量

我不知道为什么要使用动态列,但这确实不是一个好主意,因为正如文档所说,它很容易受到sql注入攻击,因为动态列中没有参数绑定。但如果你知道自己在做什么,那也没关系

最新更新