试图在Laravel Session foreach中获取非对象的属性'id'

时间:2018-07-23 09:14:59

标签: laravel laravel-5

我正在练习laravel,现在我在会议主题中

这是我的控制器

public function set(Request $request){
   $product = Product::findOrFail($request->input('id'));
   session()->put('product', $product);
   return redirect()->route('cart');
 }

当我尝试在刀片上回显{{session()->get('product')}}时,它会产生

的输出
{
  "id":9,
  "name":"Lorem ipsum dolor sit amet",
  "description":"Proin pretium, mauris id convallis tempus, lorem enim tincidunt nulla, vel pharetra sapien odio eget ligula. Sed maximus, massa sit amet condimentum bibendum, nisi ante vestibulum ipsum, ut ornare justo lorem mollis justo.",
  "price":"22.21",
  "cover_image":"JRwg9TSKTvUTvuij.jpg",
  "created_at":"2018-07-20 03:47:57",
  "updated_at":"2018-07-20 03:47:57"
}

但是当我尝试通过使用

@foreach(session()->get('product') as $key)
        {{$key->id}}
@endforeach

显示错误Trying to get property 'id' of non-object

有人可以指导我为什么我收到此错误吗?

4 个答案:

答案 0 :(得分:3)

您正在遍历单个对象,但是您似乎需要做的是:

{{ session()->get('product')->id }}

如果要循环播放,则可以执行以下操作:

@foreach (session()->get('product')->toArray() as $key => $value) 
     {{ $key }}: {{ $value }}
@endforeach

这将导致:

id: 9
name: Lorem ipsum dolor sit amet
description: Proin pretium, mauris id convallis tempus, lorem enim tincidunt nulla, vel pharetra sapien odio eget ligula. Sed maximus, massa sit amet condimentum bibendum, nisi ante vestibulum ipsum, ut ornare justo lorem mollis justo.
price: 22.21
cover_image: JRwg9TSKTvUTvuij.jpg
created_at: 2018-07-20 03:47:57
updated_at: 2018-07-20 03:47:57

但是,作为一个旁注,这是一种不好的做法,因为您将视图与会话条目耦合在一起。理想情况下,您的视图仅将产品对象作为视图参数,然后直接使用它。这样,您可以从会话或数据库查询中向该对象传递该对象。

答案 1 :(得分:1)

如果您尝试从对象中获取单个值,则可以这样获得。

{{ session()->get('product')->id }}

或者如果要打印所有数据,首先必须将对象转换为数组,然后使用foreach。

@foreach (session()->get('product')->toArray() as $key => $value) 
 {{ $key }}: {{ $value }} </br> 
@endforeach

答案 2 :(得分:0)

以这种方式尝试:

@foreach(session()->get('product') as $key)
    {{$key['id']}}
@endforeach

答案 3 :(得分:0)

您正在尝试迭代一个对象。尝试执行此操作时,将从对象获取公共属性。在您的示例中,$key是这些属性之一,而不是模型本身。

当您echo {{ }}被调用时,模型__toString会返回序列化的模型为json。

如果您想要该型号的id,可以像平常一样抓住它。 session('product')->id

如果需要,可以将模型序列化为数组:

foreach ($model->toArray() as $key => $value) {
    ...
}
相关问题