使用Laravel 4 Eloquent连接列时,列名称''无效?

时间:2015-01-23 15:49:26

标签: php sql sql-server laravel laravel-4

所以我想准备一个列表放入带有laravel的组合框中,我想使用连接来连接3列的值,我可以用这个实现它

public function deviList() {
        return Device::select(DB::raw('CONCAT(DESC, OS, OS_V) AS FullDesc'), 'DEVI_ID')                        
                        ->where('STATUS', 2)
                        ->orderBy('DESC')
                        ->lists('FullDesc', 'DEVI_ID');
    }

然而,最好有一个空格或斜线来分隔列的值,所以我这样做,就像有些人在其他地方推荐的那样:

public function deviList() {
        return Device::select(DB::raw('CONCAT(DESC," ",OS," ",OS_V) AS FullDesc'), 'DEVI_ID')                        
                        ->where('STATUS', 2)
                        ->orderBy('DESC')
                        ->lists('FullDesc', 'DEVI_ID');
    }

但是我收到错误说 SQLSTATE [42S22]:[Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]无效的列名''(所以我猜不像示例在其他地方,这些分色被读作好像它们是列?)那么如何连接某种分离呢?

2 个答案:

答案 0 :(得分:4)

如果您的SQL Server已启用QUOTED_IDENTIFIER,则双引号将用于标识对象,而不是字符串文字。在这种情况下," "不是表示空格的字符串,它将是由空格表示的对象(列),它不存在。

尝试在SQL语句中切换引号:

public function deviList() {
    return Device::select(DB::raw("CONCAT(DESC,' ',OS,' ',OS_V) AS FullDesc"), 'DEVI_ID')                        
        ->where('STATUS', 2)
        ->orderBy('DESC')
        ->lists('FullDesc', 'DEVI_ID');
}

QUOTED_IDENTIFIER docs here

答案 1 :(得分:0)

自从我使用SQL Server以来已经有一段时间了,但从我记得的情况来看,没有CONCAT功能可用。相反,你使用这样的东西:

SELECT (COALESCE(col1, '') + '' + COALESCE(col2, '')) AS col3 FROM ...

我认为你可以使用它,如果你的查询:

public function deviList() {
  return Device::select(DB::raw('(COALESCE(DESC, "") + " " + COALESCE(OS, "") + " " (COALESCE(OS_V, "")) AS FullDesc'), 'DEVI_ID')                        
    ->where('STATUS', 2)
    ->orderBy('DESC')
    ->lists('FullDesc', 'DEVI_ID');
}

不幸的是,我无法对此进行测试,但它应该做的是,使用COALESCE()检查列是否为空,然后将其与之间的空格连接,然后将其别名为FullDesc以后用。

希望这会奏效。