Попытка получить свойство необъекта после передачи массива - PullRequest
0 голосов
/ 22 октября 2019

У меня есть таблица users и таблица photos. Таблица фотографий была связана с таблицей пользователей (и некоторыми другими таблицами) через imageable_id и imageable_type. Все работает нормально для этого.

Теперь я хотел вернуть массив к представлению, которое содержит: имя пользователя, адрес электронной почты пользователя, описание пользователя и путь к изображению пользователя (из таблицы фотографий).

Я создал 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 ]

1 голос
/ 23 октября 2019

Итак, сообщение об ошибке гласит 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
1 голос
/ 23 октября 2019

Вы можете справиться с этим, определив отношения между пользователем и фотографией. В вашей пользовательской модели определите отношения с моделью фотографии

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
...