Как вызвать данные из отношений двух моделей - PullRequest
0 голосов
/ 14 января 2019

У меня есть две основные модели таблиц:

Пользователь

  • ID
  • ID_NUMBER
  • Адрес электронной почты

Адрес

  • ID
  • user_id
  • zip_code

Моя текущая модель:

public function addresses() {
    return $this->hasMany('App\Address');
}

Мой текущий адрес Модель:

public function user() {
    return $this->belongsToMany('App\User');
}

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

<div class="form-group col-md-4">
    <label for="id_number">Id Number</label>
    <input name="id_number" type="text" class="form-control" id="" value="{{ $user->id_number }}" required>
</div>
<div class="form-group col-md-4">
    <label for="email">E-mail</label>
    <input name="email" type="email" class="form-control" id="" value="{{ $user->email }}" required>
</div>
<div class="form-group col-md-4">
    <label for="zip_code">Zip Code</label>
    <input name="zip_code" type="number" class="form-control" id="" value="{{ $user->addresses()->zip_code }}">
</div>

Похоже, что только Id Number и E-mail показывают данные правильно, я не могу заставить zip_code показывать свои данные: value="{{ $user->addresses()->zip_code }}"

Я что-то упустил?

EDIT

Мой контроллер кстати:

$users = User::where('deleted_at', '=', NULL)->paginate(5);
return view('member.home')->with(compact('users'));

Мой хороший друг предложил сделать что-то вроде этого:

@foreach ($users as $user)
    @foreach ($users->addresses()->get() as $address)
        {{ $address->zip_code }}
    @endforeach
@endforeach

И это работает просто отлично. Буду очень признателен, если кто-нибудь предоставит для этого другие методы.

1 Ответ

0 голосов
/ 14 января 2019

Сначала ваше отношение в адресе belongsTo:

public function user() {
    return $this->belongsTo('App\User');
}

Тогда в вашем цикле не нужно запускать запрос по адресам, просто вызовите их как свойство для пользователя:

@foreach ($users as $user)
    @foreach ($user->addresses as $address)
        {{ $address->zip_code }}
    @endforeach
@endforeach

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

$users = User::with('addresses')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...