尝试在传递数组后获取非对象的属性

时间:2019-10-22 18:19:51

标签: php laravel laravel-blade

我有一个users表和一个photos表。 photos表已通过imageable_id和imageable_type链接到用户表(和其他一些表)。一切工作正常。

现在,我想将一个数组返回到一个包含以下内容的视图:用户名,用户电子邮件,用户desc和用户图像路径(来自photos表)。

我所做的是创建了一个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'));

仍然出现相同的错误:<< / p>

视图的代码:

@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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

因此,错误消息显示为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