Php 如何检索Laravel 5.6中视图中的一个关系

Php 如何检索Laravel 5.6中视图中的一个关系,php,mysql,laravel,relation,Php,Mysql,Laravel,Relation,我有一个关系,一个用户有许多电子邮件,一封电子邮件属于一个用户。我在我的消息模型中这样定义它: public function users() { return $this->belongsTo('App\User','sender_id','id'); } 这是我的控制器: $sender_name = Message::with('users')->get(); return view('admin.message.read',compact('message','

我有一个关系,一个用户有许多电子邮件,一封电子邮件属于一个用户。我在我的消息模型中这样定义它:

public function users() {
    return $this->belongsTo('App\User','sender_id','id');
}
这是我的控制器:

 $sender_name = Message::with('users')->get();
 return view('admin.message.read',compact('message','sender_name'));
在我看来,我是这样做的:

 @foreach($sender_name as $sender_names)
  @php(
  dd($sender_name)
  )
    {{$sender_name->name}}
 @endforeach
因此,我有两个问题:

  • 如何检索视图中定义的关系?目前,我得到一个错误,该属性在集合中不存在
  • 我是否需要像这样定义用户模型中的相反关系 以下是有关视图的代码:

    <div class="media-body">
        <h6 class="media-heading">{{$message->title}}</h6>
        <!-- sender name of Email-->
        <div class="letter-icon-title text-semibold">
            @foreach($sender_name as $sender_names)
                {{$sender_names->users->name}}
            @endforeach
        <!-- sender name of Email-->
    
        <!-- sender Email-->
            <a href="#">jira@diakultd.atlassian.net</a>
        </div>
        <!-- sender name of Email-->
    </div>
    <!-- body of Email-->
    <table width="600" border="0" cellpadding="0" cellspacing="0" align="center">
        <tr>
            <td valign="middle" align="center" style="font-size: 40px; color: #ffffff; line-height: 50px; font-weight: 300;">   
            </td>
        </tr>
    </table>
    <!-- /title -->
    
    
    {{$message->title}
    @foreach($sender\u name作为$sender\u name)
    {{$sender_name->users->name}
    @endforeach
    
    您应该试试这个

    @foreach($sender_name as $sender_names)  
        {{$sender_names->users->name}}
    @endforeach
    

    因为您希望获取添加此消息的用户。所以,您要通过它的模型获取消息,并通过关系在其中添加用户,这就是为什么您需要在消息模型中定义它

    要在视图中使用它,可以使用

    @foreach($sender_name as $sender_names)
        {{$sender_names->users->name}}
    @endforeach
    
    关于拉威尔关系的研究有很好的文献资料

    你可以这样试试


    这是一对一关系的一个很好的例子

    ,下面是我的看法: 人们说的foreach循环是正确的,但我还有一些问题,没有foreach显示发送者id我也能解决

    public function show(Message $message)                                                                       
     {                                                                                                                                                                                                                       
         $sender_name = Message::with('users')->where('sender_id', $message->sender_id)->first();                 
            Message::with('users')->get();                                                                        
         return view('admin.message.read',compact('message','sender_name'));                                      
     } 
    
    就这么简单,你把它打印出来

    {{$sender_name->users->name}}
    

    像这样,你可以打印电子邮件发件人的姓名

    ,但不幸的是,没有关系,也没有如何像文档中的真实例子那样让他们看到,现在我还有其他事情要做它显示用户名,但类似于10次:|显示已发送电子邮件的用户数例如,如果用户发送100封电子邮件,它将显示用户名100次任何想法?根据您当前的代码,它将打印每条消息的用户名。您现在想如何显示它?我只想显示发送此电子邮件的用户名和ofc它应该在我的消息表中显示一次我有一个字段作为sender_id,它获取当前登录的用户id和您在问题中看到的代码的其他部分我得到的是您想要显示单个用户的所有消息,对吗?如果是,那么您应该根据诸如User::with(“messages”)之类的用户获取消息
    public function show(Message $message)                                                                       
     {                                                                                                                                                                                                                       
         $sender_name = Message::with('users')->where('sender_id', $message->sender_id)->first();                 
            Message::with('users')->get();                                                                        
         return view('admin.message.read',compact('message','sender_name'));                                      
     } 
    
    {{$sender_name->users->name}}