【问题标题】:Laravel Database Query returns collection of objects - how do I get the values to display?Laravel 数据库查询返回对象集合 - 我如何获取要显示的值?
【发布时间】:2023-03-18 16:10:01
【问题描述】:

我想我的问题有一个简单的解决方案,我只是一个初学者:D

在我的一个控制器上,我有一个相当复杂的数据库请求(见下文),它返回对象集合而不是数组(我认为我无法使用 Eloquent 执行请求?)。现在我不知道如何让这些值实际显示在刀片​​页面中?我是否必须以某种方式将其转换为数组才能做到这一点?

非常感谢!


TagsController.php 的一部分:

$tags = DB::table('tags AS ta')
        ->select('ta.name')
        ->join('tag_thread AS tt', 'tt.tag_id', '=', 'ta.id')
        ->join(DB::raw('(select * from threads order by id desc limit 2000) th'), 'tt.thread_id', '=', 'th.id')
        ->groupBy('ta.name')
        ->orderBy(DB::raw('count(ta.name)'), 'DESC')
        ->limit(5)
        ->get();

返回$标签:

[
    {
        "name": "javascript"
    },
    {
        "name": "jquery"
    },
    {
        "name": "php"
    }
]

【问题讨论】:

  • 试试tags->implode('name', ', ')
  • 您可以使用对象表示法来回显这些值,例如:{{$item->name}}

标签: php laravel query-builder laravel-query-builder


【解决方案1】:

您可以通过以下两种方式使用集合对象获取值:

  @foreach($tags as $value)

{{$value->name}}

@endforeach

或者你可以使用 toArray 函数。只需将 toArray 函数放在查询之后,就像这样

     get()->toArray();

然后使用

    @foreach($tags as $value)

  {{$value['name']}}

     @endforeach

【讨论】:

    【解决方案2】:

    使用pluck() 获取数组中的特定列。

    $tags = DB::table('tags AS ta')
            ->select('ta.name')
            ->join('tag_thread AS tt', 'tt.tag_id', '=', 'ta.id')
            ->join(DB::raw('(select * from threads order by id desc limit 2000) th'), 'tt.thread_id', '=', 'th.id')
            ->groupBy('ta.name')
            ->orderBy(DB::raw('count(ta.name)'), 'DESC')
            ->limit(5)
            ->pluck('name');
    

    这将输出如下所示,只需在刀片中使用@foreach ()

    [
        "name1",
        "name2",
        "name3",
    ]
    

    【讨论】:

    • 太棒了,完美!太感谢了!如果我不想要“特定”列,我该怎么做?
    • @Hillcow 检索select 中的所有列,只需使用您所写问题中的get()。更多操作,可以参考query results details
    • 是的,但我无法从中检索到任何结果(错误:“htmlspecialchars() 期望参数 1 是字符串,给定对象”)
    • 给我看刀片文件,你应该使用return view('your.blade.php', compact('tags'))传递标签来查看
    • 这正是我正在做的。刀片内部:@foreach($tags as $tag) {{ $tag }} @endforeach
    【解决方案3】:

    您可以在视图中使用@foreach 语句来迭代集合

    @foreach($tags as $tag)
        <li>{{ $tag->name }}</li>
    @endforeach
    

    【讨论】:

    • 对不起,忘了提,这是我正在做的事情(根据 laravel 文档),结果是:“htmlspecialchars() 期望参数 1 是字符串,给定对象”
    【解决方案4】:

    在你的刀片模板中,你可以循环遍历它们:

    @foreach ($tags as $tag)
        <div>{{ $tag->name }}</div>
    @endforeach
    

    【讨论】:

      【解决方案5】:

      首先使用json_encode()从你的结果数据中获取json,然后使用json_decode()将json数据转换为数组。所以你的最终结果将是一个多维数组。

      $tags=json_decode(json_encode($tags,true),true);
      

      然后您可以将刀片中的数据打印为

      @foreach ($tags as $tag)
          <div>{{ $tag['name'] }}</div>
      @endforeach
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-05
        • 2017-03-01
        • 2019-05-26
        • 1970-01-01
        • 2014-10-23
        • 1970-01-01
        • 1970-01-01
        • 2020-04-12
        相关资源
        最近更新 更多