【问题标题】:Trying to get property of non-object after passing an array传递数组后尝试获取非对象的属性
【发布时间】:2020-02-18 22:55:25
【问题描述】:

我有一个users 表和一个photos 表。 photos 表已通过 imageable_id 和 imageable_type 链接到 users 表(和其他一些表)。一切都很好。

现在我想将一个数组返回到一个视图,其中包含:用户名、用户的电子邮件、用户的 desc 和用户的图像路径(来自照片表)。

我所做的是创建了一个array,其中包含来自每个用户数据的数组集合,然后将array 传递给视图:

$user_admins = array();

    $admin_id = 1;
    $admins = User::where('role_id', $admin_id)->orderBy('name', 'asc')->get();

    foreach($admins as $admin)
    {

        $photo = Photo::where('imageable_id', $admin->id)->where('imageable_type', 'App\User')->first();

        $admin_data = array('name'=>$admin->name, 'email'=>$admin->email, 'desc'=>$admin->desc, 'path'=>$photo->path);
        array_push($user_admins, $admin_data);
    }

    // return $user_admins;

    //Return View
    return view('pages/home_admin', compact('user_admins'));

但是在查看页面上,我得到了一个Trying to get property of non-object,它指出了我的:

<h5 class="card-title">{!!$admin->name!!}</h5>

如何在我的视图中访问这些用户的数据?
非常感谢!

更新

我也试过了:

foreach($admins as $admin)
    {

        $admin_data['name'] = $admin['name'];
        $admin_data['email'] = $admin['email'];
        $admin_data['desc'] = $admin['desc'];

        $photo = Photo::where('imageable_id', $admin->id)->where('imageable_type', 'App\User')->first();
        $admin_data['path'] = $photo['path'];

        // $admin_data = array('name'=>$admin->name, 'email'=>$admin->email, 'desc'=>$admin->desc, 'path'=>$photo->path);
        array_push($user_admins, $admin_data);
    }

    // return $user_admins;

    //Return View
    return view('pages/home_admin', compact('user_admins'));

还是出现同样的错误:

查看代码:

@foreach ($user_admins as $admin)
 <div class="card text-center shadow-sm ml-3" style="width: 18rem;">
    <div class="card-body">
         <img src="../user_images/img_defaultprofile.png" class="mb-3" style="height: 10vh;" alt="" srcset="">
         <h5 class="card-title">{!!$admin->name!!}</h5>
         <h6 class="card-subtitle mb-2 text-muted">{!!$admin->email!!}<h6>
         <p class="card-text">{!!$admin->desc!!}</p>
         <a href="#" class="btn btn-info">View Profile</a>
     </div>
 </div>
 @endforeach

【问题讨论】:

  • $admin 可能是数组,不是对象,所以需要使用数组访问方式,而不是对象访问方式。 $admin['name']
  • @aynber 我更新了我的问题。我试过了,但仍然出现同样的错误。
  • 显示更多视图,特别是您定义$admin的位置
  • 你能显示从用户到照片的关系声明吗?我觉得您可以使用 User 模型上的关系和访问器更轻松地处理这个问题
  • 我知道这听起来很奇怪。使用其他东西代替$admin。我最近遇到了同样的问题,为什么我尝试将 '$order' 传递给我的刀片视图并得到了确切的错误。在我将$order 更改为$other names instead of order 后,事情就解决了。不知道是不是同样的情况,我仍然试图找出原因。但我想我们很可能不在同一种情况下。

标签: php laravel laravel-blade


【解决方案1】:

您可以通过定义用户和照片之间的关系来处理它,在您的用户模型上定义与照片模型的关系

public function photo()
{
   return $this->hasOne('App\Photo','imageable_id');
}

然后在你的控制器上

$user_admins = User::where('role_id', $admin_id)->orderBy('name', 'asc')->get();
return view('pages/home_admin', compact('user_admins'));

由于已经在用户模型上定义了关系,您可以在视图中检索照片和用户数据,如下所示

@foreach ($user_admins as $admin)
 <div class="card text-center shadow-sm ml-3" style="width: 18rem;">
    <div class="card-body">
         <img src="{!!$admin->photo->path!!}" class="mb-3" style="height: 10vh;" alt="" srcset="">
         <h5 class="card-title">{!!$admin->name!!}</h5>
         <h6 class="card-subtitle mb-2 text-muted">{!!$admin->email!!}<h6>
         <p class="card-text">{!!$admin->desc!!}</p>
         <a href="#" class="btn btn-info">View Profile</a>
     </div>
 </div>
 @endforeach

【讨论】:

    【解决方案2】:

    所以错误消息是Trying to get property of non-object。这意味着,您正在尝试访问不是对象而是其他东西的变量的属性。您收到此错误是因为,您传递的变量 $user_admins 是一个数组,但您正试图将其作为对象访问。

    如何访问数组?这应该是您的代码:

    @foreach ($user_admins as $admin)
     <div class="card text-center shadow-sm ml-3" style="width: 18rem;">
        <div class="card-body">
             <img src="../user_images/img_defaultprofile.png" class="mb-3" style="height: 10vh;" alt="" srcset="">
             <h5 class="card-title">{!!$admin['name']!!}</h5>
             <h6 class="card-subtitle mb-2 text-muted">{!!$admin['email']!!}<h6>
             <p class="card-text">{!!$admin['desc']!!}</p>
             <a href="#" class="btn btn-info">View Profile</a>
         </div>
     </div>
     @endforeach
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      相关资源
      最近更新 更多