如何检索Laravel5.6中视图中的haseone关系

ldioqlga  于 2021-06-18  发布在  Mysql
关注(0)|答案(4)|浏览(326)

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

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

所以,我有两个问题:
如何检索视图中定义的关系?当前,我得到一个错误,这个属性在集合中不存在!!!
我需要像这样定义用户模型中的相反关系吗

public function messages() {
        $this->hasOne('App\Message','id','sender_id');
    }

以下是视图的代码:

<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 -->
b0zn9rqh

b0zn9rqh1#

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

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

关于拉威尔关系的研究有很好的文献资料https://laravel.com/docs/5.7/eloquent-relationships

mbjcgjjk

mbjcgjjk2#

你应该试试这个

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

rqdpfwrv3#

在我看来,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}}

这样你就可以打印出邮件发件人的名字

ymdaylpp

ymdaylpp4#

你可以这样试试

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

这是一对一关系的好例子

相关问题