У меня есть таблица пользователей, в которой есть идентификатор и 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), когда регистрируется" Пользователь может нанять столько людей, сколько захочет.
гм, -> all () не нуждается в -> get () потом, я думаю .. И если with будет работать ... ну, я не знаю. Я спрашиваю вас, ребята: D Если я сделаю это без with () и просто сделаю $ user-> recruited () -> email, это тоже не сработает.
Вы установили какие-либо отношения в своей модели User?
да, я установил некоторые отношения в моей пользовательской модели.
Они просто не относятся к этой проблеме, поэтому я не записал их здесь
Вы определили связь под названием recruited на своей пользовательской модели?
хм, ну нет, только эта функция recruited () в пользовательской модели. Это не совсем отношения .. ты прав
Итак, функция with() действительно предназначена для использования с отношениями. добавьте отношение hasOne к вашей модели User с именем столбца, установленным как ваш столбец "исходит из".






Примечание: я предполагаю, что человек может нанять более одного человека в вашем заявлении. Так что я думаю, что отношения 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
Для начала вы забыли -> get () в конце; Также будет ли with () работать, если вы не определяете отношения?