使用 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.
所以我想准备一个列表以放入带有 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.