Laravel查询生成器 - 联合 - 未找到列错误

时间:2016-07-01 12:01:13

标签: php mysql laravel union

我正在使用 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();

3 个答案:

答案 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'
  )