Laravel: доступ к коллекции в поле зрения - PullRequest
0 голосов
/ 18 сентября 2018

Я хотел бы отобразить пользователей, которые отправили или получили сообщение / с.

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

public function messages_sender()
{
    return $this->hasMany('App\Message', 'sender_id');
}

public function messages_recipient()
{
    return $this->hasMany('App\Message', 'recipient_id');
}

MessageController

public function index()
{
    $users = User::with('messages_recipient', 'messages_sender')->paginate(5);
    //return $users;
    return view('message.index',compact('users'));
}

Просмотр сообщений:

{{ $user->messages_recipient['recipient_id'] }}

Результатом является ошибка в представлении «Неопределенный индекс: receient_id» или когда я пытаюсь получить доступ к любому из них (sender_id, receient_id).Я понимаю, что не все пользователи имеют сообщения, как я вижу в формате JSON, поэтому я использовал:

@if($user->messages_recipient->has('recipient_id'))
    {{ $user->messages_recipient['recipient_id'] }}
@endif

и ошибка не показала.

JSON: https://pastebin.com/NFSWMp7r

Поскольку я новичок в Laravel, я мог бы использовать некоторую помощь.В аналогичном примере это работало, когда мне нужно было получить пользователей и название их роли (admin, user).

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы можете получить доступ к пользователям из модели App\Message, а не наоборот.

Модель сообщения:

public function senders()
{
    return $this->belongsTo('App\Users', 'sender_id');
}

Контроллер сообщений

public function index()
{
    $senders = Message::senders()->paginate(5);

    return view('message.index',compact('senders'));
}

Не вините меня, но я не уверен, что sender_id точно здесь: -P

К сожалению, если вам нужны уникальные записи, это не сработает.

0 голосов
/ 18 сентября 2018

Вы используете message_recipient в качестве массива, и если ключ не существует в массиве, PHP всегда выдаст ошибку.Отношение hasMany возвращает объекты Collection of Message, поэтому вам нужно будет использовать их как объект с:

@foreach($user->messages_sender as $message)   
    {{ $message->id }}
@endforeach

и

@foreach($user->messages_recipient as $message)   
    {{ $message->id }}
@endforeach

или если вы просто хотите получить все идентификаторы сообщенийВы можете сделать $user->messsages_recipient->pluck('id'), и это вернет все идентификаторы объектов Message.

...