【问题标题】:Laravel: Access collection in viewLaravel:在视图中访问集合
【发布时间】:2019-02-22 21:49:05
【问题描述】:

我想显示已发送或收到消息的用户。

用户模型:

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

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

消息控制器

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

结果是视图“未定义索引:recipient_id”或当我尝试访问其中任何一个(sender_id、receiver_id)时出现错误。我了解并非所有用户都有消息,正如我在 JSON 格式中看到的那样,所以我使用了:

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

并且没有显示错误。

JSON:https://pastebin.com/NFSWMp7r

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

【问题讨论】:

    标签: laravel collections view


    【解决方案1】:

    您可以通过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

    很遗憾,如果您想要唯一的记录,这将不起作用。

    【讨论】:

      【解决方案2】:

      您将 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        • 1970-01-01
        • 2021-09-28
        • 2019-12-01
        相关资源
        最近更新 更多