【问题标题】:Laravel DB::raw using SELECT column AS "Example Name"Laravel DB::raw 使用 SELECT 列作为“示例名称”
【发布时间】:2015-07-14 00:08:34
【问题描述】:

我在尝试对 Laravel 使用 DB::raw 查询时遇到了一个问题。当我尝试遍历我的结果集时,我无法定位某个列,因为它的名称包含一个空格:

$result = DB::connection("example")->select(DB::raw(
  "SELECT table.column_1 AS 'NameOne',
  table.column_2 AS 'Name Two'
  FROM example;"
));

如您所见,NameOne 不包含空格,但 Name Two 包含。循环遍历结果集时,我无法回显table.column_2 AS 'Name Two 的结果,因为我无法正确定位它。我试过的:

<!-- language: html -->
@foreach($result AS $item)
<tr>
  <td>{!! $result->NameOne !!}</td> <!-- Works Fine -->
  <td>{!! $result->Name Two !!}</td> <!-- Doesn't work (obvious syntax error) -->
  <td>{!! $result->Name_Two !!}</td> <!-- Doesn't work (undefined property) -->
  <td>{!! $result->Name+Two !!}</td> <!-- Doesn't work (undefined property) -->
  <td>{!! $result->NameTwo !!}</td> <!-- Doesn't work (undefined property) -->
</tr>
@endforeach

具体的未定义属性错误是:

未定义属性:stdClass::$Name_Two(查看:/var/www/html/APPNAME/resources/views/index.blade.php)

我不想更改键,因为这些结果正在导出到 Excel,并且我想保留列名。牢记这一点,我将如何回应这些结果?

另外,dd($results) 的输出:

array:1 [▼
  0 => {#179 ▼
    +"NameOne": "NameOne"
    +"Name Two": "NameTwo"
  }
]

【问题讨论】:

    标签: php mysql laravel laravel-5


    【解决方案1】:

    你可以使用

    <td>{!! $result->{'Name Two'} !!}</td>
    

    【讨论】:

    • 就是这样。出于好奇,你在哪里找到这个?我查看了 Laravel 的文档,没有发现这个问题。
    • 啊。所以这不是 Laravel 特有的东西。很高兴知道!
    • 基本上,Blade 标签只是&lt;?= e(...) ?&gt;&lt;?= ... ?&gt; 的简写。
    【解决方案2】:

    Eloquent 正在返回 stdClass。您可以使用函数'get_object_vars' 轻松将其转换为数组。

    然后简单地调用:

    {!! $result['Name Two'] !!}
    

    【讨论】:

    • 似乎不起作用。 $result 是一个数组,而不是一个对象(显然):get_object_vars() expects parameter 1 to be object, array given
    • 是的,但是如果您将在单个数组记录上使用此功能,它将起作用。无论如何,Damien 解决方案要好得多。
    • 啊,我明白了。我不知道我是否可以实现它并且仍然具有我想要的灵活性,所以我最终使用了他的解决方案。不过谢谢!
    猜你喜欢
    • 2015-10-27
    • 2017-11-17
    • 2018-07-06
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 2018-01-31
    相关资源
    最近更新 更多