Laravel - получить значения отношения к той же модели

У меня есть таблица пользователей, в которой есть идентификатор и come_from (id), указывающий на столбец id той же таблицы пользователей.

Например:

User
id, comes_from
1,  null
2,  1 

Таким образом, пользователь с ID 2 происходит от пользователя с ID 1.

Сейчас пытаюсь построить это.

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

Моя модель пользователя:

public function recruited()
    {
        return self::findOrFail($this->comes_from)->pluck('email', 'id');
    }

Теперь в моем контроллере:

  public function recruitedUsersList()
    {
        return view('admin.recruitedUsers')->with('users', User::all()->with('recruited'));
    }

Это говорит мне "Вызов неопределенного метода с помощью"

В моем клинке:

@foreach($users as $user)
       <tr>
             <td>{{ $user->id }}</td>
             <td>{{ $user->email }}</td>
             <td>{{ $user->name }}</td>
             <td>{{ $user->recruited()->email }}</td>
       </tr>
@endforeach

Ну .. это не работает для меня. Есть у кого-нибудь идея?

Идея такова:

Пользователь может зайти только от одного человека. Он получает "приходит_from (id), когда регистрируется" Пользователь может нанять столько людей, сколько захочет.

Для начала вы забыли -> get () в конце; Также будет ли with () работать, если вы не определяете отношения?

thecoolestguyever123 21.12.2018 14:12

гм, -> all () не нуждается в -> get () потом, я думаю .. И если with будет работать ... ну, я не знаю. Я спрашиваю вас, ребята: D Если я сделаю это без with () и просто сделаю $ user-> recruited () -> email, это тоже не сработает.

JuniorDev 21.12.2018 14:17

Вы установили какие-либо отношения в своей модели User?

Joe 21.12.2018 14:18

да, я установил некоторые отношения в моей пользовательской модели.

JuniorDev 21.12.2018 14:19

Они просто не относятся к этой проблеме, поэтому я не записал их здесь

JuniorDev 21.12.2018 14:20

Вы определили связь под названием recruited на своей пользовательской модели?

Joe 21.12.2018 14:21

хм, ну нет, только эта функция recruited () в пользовательской модели. Это не совсем отношения .. ты прав

JuniorDev 21.12.2018 14:24

Итак, функция with() действительно предназначена для использования с отношениями. добавьте отношение hasOne к вашей модели User с именем столбца, установленным как ваш столбец "исходит из".

Joe 21.12.2018 14:25
Стоит ли изучать 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 и хотите разрабатывать...
0
8
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Обновите функцию в вашей модели User

public function recruited()
{
   return $this->hasMany('App\User', 'comes_from');
}

Обновите свой контроллер до этого

public function recruitedUsersList()
{
    return view('admin.recruitedUsers')->with('users', User::with('recruited')->get());
}

Обновите свою логику просмотра до этого

@foreach($users as $user)
   <tr>
         <td>{{ $user->id }}</td>
         <td>{{ $user->email }}</td>
         <td>{{ $user->name }}</td>
         <td>
            @foreach($user->recruited as $recruit)
               {{ $recruit->email }}, 
            @endforeach
         </td>
   </tr>
@endforeach

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