使用 Laravel 4 Eloquent 连接列的列名称“ ”无效?

Invalid column name ' ' on concatenate columns with Laravel 4 Eloquent?

所以我想准备一个列表以放入带有 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');
    }

不过,最好用 space 或斜线分隔列的值,所以我这样做了,就像一些人在其他地方推荐的那样:

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][ODBC Driver 11 for SQL Server][SQL Server]Invalid列名 ' '(所以我猜与其他地方给出的示例不同,这些分隔被读取时就好像它们是列一样?)那么如何连接某种分隔?

我使用 SQL 服务器已经有一段时间了,但据我所知,没有 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() 检查列是否为空,然后再将其与 space 连接起来,然后将其别名为FullDesc 以备后用。

希望能奏效。

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

尝试在您的 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 文档 here.