【问题标题】:Can't pass element from array to view无法将元素从数组传递到视图
【发布时间】:2020-12-06 20:03:04
【问题描述】:

尝试将 - 不成功 - 作为分隔值从该数组传递到视图中:

  #items: array:1 [▼
    0 => {#548 ▼
      +"location": "Guadalajara"
      +"location_id": 34
    }
  ]
}

这个数组出现在左连接查询之后

$default_loc = DB::table('users')
                ->leftJoin('locations', 'users.location_id','=','locations.id')
                ->where('users.id',auth()->user()->id)
                ->select('location', 'location_id')
                ->get();

如果我尝试通过compact('default_loc') 将此数组传递给视图,我只能使用{{ $default_loc }} 显示整个数组,但不能将其分成$default_loc->location$default_loc->id .

谢谢大家,

【问题讨论】:

  • 可能因为是一个数组,所以将其作为数组访问可能是一个很好的起点:{{ $default_loc[0]->location_id }}
  • 就是这样。谢谢!

标签: arrays laravel collections eloquent laravel-query-builder


【解决方案1】:

由于$default_loc是一个数组,你应该把它当作一个数组,所以要访问它你需要使用[]操作符:

{{ $default_loc[0]->location_id }}

但是,如果您确定只返回 1 条记录,您可以使用 first() 方法而不是 get() 直接为您提供对象:

$default_loc = DB::table('users')
            ->leftJoin('locations', 'users.location_id','=','locations.id')
            ->where('users.id',auth()->user()->id)
            ->select('location', 'location_id')
            ->first();

...
{{ $default_loc->location_id }}

【讨论】:

  • 为了进一步说明,->get() 不返回一个数组,而是一个集合:laravel.com/docs/7.x/collections。这是一个数组的包装类,因此可以通过[0] 访问数组,但它们足够不同,可以意识到差异。
  • @TimLewis 起初我看到了输出的#items: array,所以我认为它是一个数组,但是是的get() 返回一个集合
  • 哈哈,是的,如果你在集合上执行dd(),就会看到这样的结果:) dd(collect()): Illuminate\Support\Collection {#3289 #items: []};可以看到底层属性#items是一个数组
  • 谢谢。我不习惯返回数组,只返回字符串或整数。我实际上想返回数组中的两个元素,所以{{ $default_loc[0]->item}} 解决了这个问题。
【解决方案2】:

您的预期结果总是 1 个结果吗?如果是,您可以将 ->get() 更改为 ->first(),那么您将只有一个 Object。

如果没有,则需要在视图中使用索引进行迭代或访问:

@foreach($default_loc as $loc) 
   {{ $loc->location_id }} - {{ $loc->location }}
@endforeach

{{ $default_loc[INDEX]->location_id }} {{ $default_loc[INDEX]->location }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2013-04-09
    相关资源
    最近更新 更多