Laravel:视图中的访问集合

问题描述 投票:1回答:2

我想显示已发送或获得消息的用户。

用户模型:

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'] }}

结果是视图“Undefined index:recipient_id”中的错误,或者当我尝试访问其中任何一个(sender_id,recipient_id)时出错。据我所知,并非所有用户都有消息,因为我看到的是JSON格式,所以我用过:

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

而不是错误没有显示。

JSON:https://pastebin.com/NFSWMp7r

因为我是Laravel的新手,我可以使用一些帮助。在类似的示例中,当我需要获取用户和他们的角色名称(管理员,用户)时,它可以工作。

laravel collections view access
2个回答
0
投票

您可以从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
投票

您使用message_recipient作为数组,如果数组上不存在键,PHP将始终抛出错误。 hasMany关系返回Message对象的Collection,因此您需要将其用作对象:

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

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

或者如果您只是想要所有的消息ID,您可以执行$user->messsages_recipient->pluck('id')并返回Message对象的所有ID。

© www.soinside.com 2019 - 2024. All rights reserved.