Свойство исключения [изображение] не существует в этом экземпляре коллекции

#php #laravel #collections #laravel-8

Вопрос:

Я следую инструкции по созданию клона instagram с помощью Laravel. В конце концов я начал вносить некоторые свои собственные изменения.

Я пытаюсь получить заголовок и изображение профиля пользователя из PostsController. Теперь я могу успешно получить название профиля, но я хочу получить изображение того же профиля, что я не могу сделать. Я использую изображение Вмешательства.

Это мой постконтроллер

 public function index()
{
    $users = auth()->user()->following()->pluck('profiles.user_id');

    $posts = Post::whereIn('user_id', $users)->latest()->paginate(5);

    $newUsers = Profile::all('id', 'title', 'image')->sortDesc();

    // $newUsersImage = Image::make(public_path("storage/{$newUsers->image}"))->orientate()->fit(100, 100);

    dd($newUsers->image);

    return view('posts.index', compact('posts', 'newUsers'));
}
 

когда я определяю новых пользователей, это дает следующие результаты:

     IlluminateDatabaseEloquentCollection {#469 ▼
  #items: array:13 [▼
    12 => AppModelsProfile {#1451 ▼
      #fillable: array:4 [▶]
      #connection: "mysql"
      #table: "profiles"
      #primaryKey: "id"
      #keyType: "int"
       incrementing: true
      #with: []
      #withCount: []
       preventsLazyLoading: false
      #perPage: 15
       exists: true
       wasRecentlyCreated: false
      #attributes: array:3 [▶]
      #original: array:3 [▶]
      #changes: []
      #casts: []
      #classCastCache: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
       timestamps: true
      #hidden: []
      #visible: []
      #guarded: array:1 [▶]
    }
    11 => AppModelsProfile {#1443 ▶}
    10 => AppModelsProfile {#1437 ▶}
    9 => AppModelsProfile {#1454 ▶}
    8 => AppModelsProfile {#1452 ▶}
    7 => AppModelsProfile {#1419 ▶}
    6 => AppModelsProfile {#1442 ▶}
    5 => AppModelsProfile {#1461 ▶}
    4 => AppModelsProfile {#1459 ▶}
    3 => AppModelsProfile {#1433 ▶}
    2 => AppModelsProfile {#1455 ▶}
    1 => AppModelsProfile {#1411 ▶}
    0 => AppModelsProfile {#1410 ▶}
  ]
}
 

Но когда я добавляю $newUsers->image, он говорит: Свойство исключения [изображение] не существует в этом экземпляре коллекции.

Но, на мой взгляд, я получаю адрес, используя тот же $newUsers->изображение.

Извините за мой язык, и если я не могу объяснить лучше, я очень новичок в php и laravel.

Комментарии:

1. Это связано с тем, что у $newUsers более одного профиля, это набор профилей. Сначала вам нужно выбрать профиль, сделав что-то вроде foreach ($newUsers as $profile) { echo $profile->image; });

Ответ №1:

Это потому, что возврат из $newUsers = Profile::all('id', 'title', 'image')->sortDesc(); массива

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

пробовать dd($newUsers[0]->image)

Предполагая, что модель имеет столбец изображения, она должна работать

Комментарии:

1. спасибо, что проблема решена, мне нужно было просмотреть коллекцию.

Ответ №2:

Из того, что я вижу в коде, я думаю, что $newUsers-это коллекция, а не одна модель. Это означает, что это коллекция моделей.

В коллекции нет изображения, но у каждого элемента в коллекции есть одно изображение.

Просто сделайте цикл для каждого из них, и вы получите изображение объекта профиля и экземпляра модели.

 foreach ($newUsers as $profile) {
  dd($profile->image);
}
 

Комментарии:

1. Спасибо… Мне нужно было просмотреть коллекцию, идея была упущена… проблема решена

2. Рад помочь 🙂