我正在使用 Laravel “查询”构建器来生成联合查询。并且我在union中的一个查询有3个选择字段,其他查询在union中有2个选择字段。所以我添加了一个空字段来匹配列数。 laravel说出以下错误
找不到列:1054'字段列表'中的未知列''
$i = 0;
foreach($sources as $key=>$value)
{
$db = $value['db'];
$table = $value['table'] ;
$fields = $value['fields'];
$join = DB::table($db.'.'.$table)
->whereIn($table.'.'.$table.'_sys_id',$value['values'])
->select($fields);
if($i <1)
{
$tagResultQuery = $join;
}
else{
$tagResultQuery->union($join);
}
$i++;
}
$result = $tagResultQuery->get();
答案 0 :(得分:1)
因为列的名称不同。这是一个例子
SELCT
col1,
col2,
col3
FROM tbl_1
UNION
SELCT
col1,
col2,
'' as col3
FROM tbl_2
如果你不添加(''作为col3)将会出现像你的错误
答案 1 :(得分:0)
您应该将所有可能的列设置为字段数组。
$fileds_array= $value['fields'];
$fields=[
'colA'=>if(isset($fileds_array['colA'])) ? $fileds_array['colA'] : '',
'colA'=>if(isset($fileds_array['colB'])) ? $fileds_array['colB'] : '',
........................
........................
'colN'=>if(isset($fileds_array['colN'])) ? $fileds_array['colN'] : ''
];
这应该有效。
答案 2 :(得分:0)
大家通过使用以下
替换Select语句来解决所有问题->select(
$fields[0].' AS tag_title',
$fields[0].' AS tag_url',
$fields[0].' AS tag_unique_name'
)