Как получить отношение Has One в Laravel 5.6 - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть отношения, когда у пользователя много электронных писем, и электронная почта принадлежит одному пользователю. Я определяю это так в моей модели сообщений:

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

Итак, у меня есть 2 вопроса:

  1. Как мне получить отношение, которое я определил в своем представлении? В настоящее время я получаю сообщение об ошибке, что это свойство не существует в коллекции !!!
  2. Нужно ли мне определять противоположное отношение в модели пользователя следующим образом? :
    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 -->

Ответы [ 4 ]

0 голосов
/ 14 ноября 2018

так вот что со мной произошло, ввиду: циклы foreach, которые, как говорили люди, были правдой, но у меня была другая проблема, которую я мог бы обойтись без foreach, чтобы показать идентификатор отправителя

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

и таким образом вы можете напечатать имя отправителя электронного письма

0 голосов
/ 14 ноября 2018

Как вы хотите получить пользователя, который добавил это сообщение. Итак, для этого вы выбираете сообщения через его модель и добавляете в нее пользователей посредством отношений, поэтому вам нужно определить это в модели сообщений.

Чтобы использовать его в представлениях, вы можете использовать

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

Для изучения отношений у Ларавеля есть хорошая документация https://laravel.com/docs/5.7/eloquent-relationships

0 голосов
/ 14 ноября 2018

вы можете попробовать вот так

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

см. это хороший пример отношений один к одному

0 голосов
/ 14 ноября 2018

Вы должны попробовать это

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