Доступ к данным таблицы в Laravel

Я пытаюсь показать список контактов вошедшего в систему пользователя. Но очевидно я что-то не так делаю.

На странице списка контактов появляется ошибка:

Trying to get property 'name' of non-object

User.php

public function contacts()
    {
        return $this->belongsToMany(Contact::class);
    }


Contact.php

public function users()
    {
        return $this->belongsToMany(User::class);
    }


ContactsController.php

public function index()
    {
        //
        $user = Auth::user();
        $user_contacts = $user->contacts()
        return view('contacts.list')->with('contacts', $user_contacts);
    }

list.blade.php

@foreach ($contacts as $contact)
    * {{ $contact->name }} <br>
@endforeach


Table schema:
контакты:
  • я бы
  • создано на
  • updated_at
  • название
  • адрес

пользователи:

  • я бы
  • название
  • пароль
  • Remember_token
  • создано на
  • updated_at

contact_user:

  • contact_id
  • ID пользователя

Ваш User.php не имеет функции отношения contacts()

Nitish Kumar 10.03.2018 20:37

Ошибка, исправлено

Biswajit Chopdar 10.03.2018 20:43
$user_contacts = $user->contacts() должен быть $user_contacts = $user->contacts.
ako 10.03.2018 23:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
615
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если вы хотите получить доступ к сводным свойствам вашей таблицы отношений многие-ко-многим, вы можете получить доступ с помощью pivot

    @foreach ($contacts as $contact)
       * {{ $contact->pivot->name }} <br>
    @endforeach

Также создает отношения между контактом и пользователями.

public function contacts()
{
    return $this->belongsToMany(Contat::class)->withPivot(['your', 'pivot','columns']);

}

Надеюсь это поможет

В нем говорится: «Попытка получить свойство 'pivot' не-объекта».

Biswajit Chopdar 10.03.2018 20:42

@Raven создали ли вы отношения между пользователем и контактами?

Adnan Mumtaz 10.03.2018 20:45

использовать ->withPivot(['your', 'pivot','columns']);

Adnan Mumtaz 10.03.2018 20:46

Да, я создал отношения ->withPivot(['name', 'address']);

Biswajit Chopdar 10.03.2018 20:47

@Raven, вам тоже нужно изменить код в вашем контроллере

Adnan Mumtaz 10.03.2018 20:49

На что поменять?

Biswajit Chopdar 10.03.2018 20:50

Позвольте нам продолжить обсуждение в чате.

Adnan Mumtaz 10.03.2018 20:51

Вы должны вернуть данные своей сводной таблицы в следующем соотношении:

public function contacts()
{
    return $this->belongsToMany(Contat::class)->withPivot(['your', 'pivot','columns']);

}

И вы должны получить данные отношения, как показано ниже:

$user_contacts = $user->contacts // Not $user->contacts()

Я получаю сообщение об ошибке: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'contact_user.name' in 'field list'

Biswajit Chopdar 11.03.2018 08:30

@Raven Откуда у тебя эта ошибка? Отредактируйте свой вопрос, включив в него поля модели (схему таблицы).

ako 11.03.2018 09:26

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

Biswajit Chopdar 11.03.2018 09:36

@Raven Что выводит dd($contacts) на индексную страницу?

ako 11.03.2018 10:28

@Raven Продолжим обсуждение здесь в чате

ako 11.03.2018 10:41
Ответ принят как подходящий

В вашем контроллере у вас есть следующее:

public function index()
{
    $user = Auth::user();
    $user_contacts = $user->contacts()
    return view('contacts.list')->with('contacts', $user_contacts);
}

Это должно быть следующее;

public function index()
{
    $user = Auth::user();
    $user_contacts = $user->contacts
    return view('contacts.list')->with('contacts', $user_contacts);
}

Использование $user->contacts() (метод) вернет экземпляр построителя запросов для этой связи, тогда как $user->contacts (свойство) вернет коллекцию с результатами из запроса выбора.

Другие вопросы по теме